@syncfusion/ej2-image-editor 20.4.38 → 20.4.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -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 +39 -8
- package/dist/es6/ej2-image-editor.es2015.js.map +1 -1
- package/dist/es6/ej2-image-editor.es5.js +39 -8
- 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 +13 -12
- package/src/image-editor/image-editor-model.d.ts +14 -3
- package/src/image-editor/image-editor.d.ts +36 -8
- package/src/image-editor/image-editor.js +39 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-image-editor.umd.min.js","sources":["../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader, Slider } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Complex, compile, compile as templateCompiler, Browser, detach, select, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for image finetune values.\n */\nvar FinetuneSettings = /** @class */ (function (_super) {\n __extends(FinetuneSettings, _super);\n function FinetuneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"brightness\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"contrast\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"hue\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"saturation\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"exposure\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"blur\", void 0);\n return FinetuneSettings;\n}(ChildProperty));\nexport { FinetuneSettings };\n/**\n * Image Editor is a graphical user interface that helps to edit an image by performing actions like selection,\n * cropping, rotating, inserting text and shapes (rectangles, ellipses, lines), and drawing free hand on top of an image.\n *\n ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({});\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\nvar ImageEditor = /** @class */ (function (_super) {\n __extends(ImageEditor, _super);\n /**\n *\n * Constructor for creating the widget\n *\n * @param {ImageEditorModel} options - Specifies the image editor model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function ImageEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.degree = 0; // current rotated state\n _this.dragCanvas = false;\n _this.dragElement = '';\n _this.keyHistory = ''; // text history\n _this.flipState = ''; // current flip state whether horizontal or vertical or none\n _this.mouseDownPoint = { x: 0, y: 0 };\n _this.previousPoint = { x: 0, y: 0 }; // updates prev x and y points in mouseMove\n _this.dragPoint = { startX: 0, startY: 0, endX: 0, endY: 0 }; // updates drag start and end points in mousedown and mousemove\n _this.diffPoint = { x: 0, y: 0 }; // updates resize points\n _this.oldPoint = {};\n _this.objColl = []; // shapes, text obj collection\n _this.undoRedoColl = [];\n _this.imgDataColl = []; // collection of Image Data mainly used for reset state\n _this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.textSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.toolbarHeight = 46;\n _this.pannStart = {};\n _this.pannEnd = {};\n _this.togglePan = false;\n _this.disablePan = false;\n _this.lastX = 0;\n _this.lastY = 0;\n _this.dragStart = { x: 0, y: 0 };\n _this.factor = 1; // current zoomed state\n _this.currFlipState = '';\n _this.touchEndPoint = {};\n _this.prevX = 0;\n _this.currX = 0;\n _this.prevY = 0;\n _this.currY = 0;\n _this.togglePen = false;\n _this.currentToolbar = 'main';\n _this.textStartPoints = { x: 0, y: 0 };\n _this.fontSizeColl = [];\n _this.tempKeyHistory = '';\n _this.penDrawColl = [];\n _this.allowDrag = false;\n _this.textRow = 1;\n _this.activeObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] };\n _this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n _this.defToolbarItems = [];\n _this.baseImgSrc = {};\n _this.isTimer = false;\n _this.isScreenOriented = false;\n _this.isFirstMove = false;\n _this.startTouches = [];\n _this.tempTouches = [];\n _this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.adjustmentValue = '';\n _this.initialAdjustmentValue = '';\n _this.tempAdjustmentValue = '';\n _this.currentFilter = '';\n _this.tempFilter = '';\n _this.canvasFilter = '';\n _this.sharpenedImgData = false;\n _this.tempSharpenFilter = false;\n _this.tempBWFilter = false;\n _this.isBrightnessAdjusted = false;\n _this.isInitialLoading = false;\n return _this;\n }\n ImageEditor_1 = ImageEditor;\n ImageEditor.prototype.preRender = function () {\n // pre render code snippets\n this.element.id = this.element.id || getUniqueID('ej2-image-editor');\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n this.themeColl = {\n Bootstrap5: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Bootstrap5Dark: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Tailwind: { primaryColor: '#4f46e5', secondaryColor: '#fff' },\n TailwindDark: { primaryColor: '#22d3ee', secondaryColor: '#fff' },\n Fluent: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n FluentDark: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n Bootstrap4: { primaryColor: '#007bff', secondaryColor: '#fff' },\n Bootstrap: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n BootstrapDark: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n Material: { primaryColor: '#e3165b', secondaryColor: '#fff' },\n MaterialDark: { primaryColor: '#00b0ff', secondaryColor: '#fff' },\n Fabric: { primaryColor: '#0078d6', secondaryColor: '#fff' },\n FabricDark: { primaryColor: '#0074cc', secondaryColor: '#fff' },\n Highcontrast: { primaryColor: '#000000', secondaryColor: '#fff' }\n };\n this.defaultLocale = {\n Crop: 'Crop',\n ZoomIn: 'Zoom In',\n ZoomOut: 'Zoom Out',\n Undo: 'Undo',\n Redo: 'Redo',\n Transform: 'Transform',\n Annotation: 'Annotation',\n Finetune: 'Finetune',\n Brightness: 'Brightness',\n Contrast: 'Contrast',\n Hue: 'Hue',\n Saturation: 'Saturation',\n Opacity: 'Opacity',\n Blur: 'Blur',\n Sharpen: 'Sharpen',\n Exposure: 'Exposure',\n Filter: 'Filter',\n Default: 'Default',\n Chrome: 'Chrome',\n Cold: 'Cold',\n Warm: 'Warm',\n Grayscale: 'Grayscale',\n BlackAndWhite: 'Black and White',\n Sepia: 'Sepia',\n Invert: 'Invert',\n Text: 'Add Text',\n Pen: 'Pen',\n Reset: 'Reset',\n Save: 'Save',\n Select: 'Select',\n RotateLeft: 'Rotate Left',\n RotateRight: 'Rotate Right',\n HorizontalFlip: 'Horizontal Flip',\n VerticalFlip: 'Vertical Flip',\n OK: 'OK',\n Cancel: 'Cancel',\n FillColor: 'Fill Color',\n StrokeColor: 'Stroke Color',\n StrokeWidth: 'Stroke Width',\n FontFamily: 'Font Family',\n FontStyle: 'Font Style',\n FontSize: 'Font Size',\n FontColor: 'Font Color',\n Pan: 'Pan',\n Move: 'Move',\n Load: 'Load',\n Custom: 'Custom',\n Square: 'Square',\n Circle: 'Circle',\n Ellipse: 'Ellipse',\n Rectangle: 'Rectangle',\n Line: 'Line',\n Bold: 'Bold',\n Italic: 'Italic',\n BoldItalic: 'Bold Italic',\n XSmall: 'X-Small',\n Small: 'Small',\n Medium: 'Medium',\n Large: 'Large',\n XLarge: 'X-Large',\n ABC: 'ABC',\n Browse: 'Browse'\n };\n this.l10n = new L10n('image-editor', this.defaultLocale, this.locale);\n };\n /**\n *\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ImageEditor.prototype.render = function () {\n this.initialize();\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ImageEditor.prototype.getModuleName = function () {\n return 'image-editor';\n };\n /**\n *\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n * @private\n */\n ImageEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n *\n * Called internally if any of the property value changed.\n *\n * @param {ImageEditorModel} newProperties - Specifies new properties\n * @param {ImageEditorModel} oldProperties - Specifies old properties\n * @returns {void}\n * @private\n */\n ImageEditor.prototype.onPropertyChanged = function (newProperties, oldProperties) {\n for (var _i = 0, _a = Object.keys(newProperties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProperties.cssClass) {\n removeClass([this.element], oldProperties.cssClass.split(' '));\n }\n if (newProperties.cssClass) {\n addClass([this.element], newProperties.cssClass.split(' '));\n }\n break;\n case 'disabled':\n if (newProperties.disabled) {\n this.element.classList.add('e-disabled');\n this.unwireEvent();\n }\n else {\n this.element.classList.remove('e-disabled');\n this.wireEvent();\n }\n break;\n case 'height':\n this.element.style.height = newProperties.height;\n break;\n case 'width':\n this.element.style.width = newProperties.width;\n break;\n case 'theme':\n if (newProperties.theme) {\n this.updateTheme();\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n }\n break;\n case 'finetuneSettings':\n if (newProperties.finetuneSettings) {\n this.finetuneSettings = newProperties.finetuneSettings;\n this.updateFinetunes();\n }\n break;\n }\n }\n };\n ImageEditor.prototype.destroy = function () {\n var classList = [];\n this.element.removeAttribute('tabindex');\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n this.destroySubComponents();\n this.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.updateFinetunes();\n this.createToolbar();\n this.createContextualToolbar();\n this.createCanvas();\n this.wireEvent();\n this.updateContext(this.lowerContext);\n this.updateContext(this.upperContext);\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.filter = this.canvasFilter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.element) {\n createSpinner({\n target: this.element\n });\n }\n };\n ImageEditor.prototype.updateFinetunes = function () {\n if (this.finetuneSettings) {\n if (this.finetuneSettings.brightness) {\n this.adjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n this.tempAdjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n }\n if (this.finetuneSettings.contrast) {\n this.adjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n this.tempAdjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n }\n if (this.finetuneSettings.hue) {\n this.adjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n this.tempAdjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n }\n if (this.finetuneSettings.saturation) {\n this.adjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n this.tempAdjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n }\n if (this.finetuneSettings.exposure) {\n this.adjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n this.tempAdjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n }\n if (this.finetuneSettings.opacity) {\n this.adjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n this.tempAdjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n }\n if (this.finetuneSettings.blur) {\n this.adjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n this.tempAdjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n }\n this.isInitialLoading = true;\n }\n };\n /**\n *\n * This Method will add events to component (element, event, method, current reference)\n *\n * @returns {void}.\n */\n ImageEditor.prototype.wireEvent = function () {\n EventHandler.add(document, 'keydown', this.keyDownEventHandler, this);\n EventHandler.add(document, 'keypress', this.keyUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousedown', this.mouseDownEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler, this);\n EventHandler.add(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(this.upperCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.upperCanvas, 'dblclick', this.findTextPoint, this);\n EventHandler.add(this.textBox, 'mousedown', this.findTextPoint, this);\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n if (!Browser.isIos && Browser.info.name !== 'safari' && screen && screen.orientation) {\n screen.orientation.addEventListener('change', this.screenOrientation.bind(this));\n }\n };\n /**\n *\n * This Method will remove events from component\n *\n * @returns {void}.\n */\n ImageEditor.prototype.unwireEvent = function () {\n EventHandler.remove(document, 'keydown', this.keyDownEventHandler);\n EventHandler.remove(document, 'keypress', this.keyUpEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousedown', this.mouseDownEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler);\n EventHandler.remove(this.upperCanvas, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler);\n EventHandler.remove(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler);\n EventHandler.remove(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.canvasMouseUpHandler);\n };\n ImageEditor.prototype.initializeFilter = function () {\n this.setBrightness(this.adjustmentLevel.brightness);\n this.setContrast(this.adjustmentLevel.contrast);\n this.setHue(this.adjustmentLevel.hue);\n this.setSaturation(this.adjustmentLevel.saturation);\n this.setExposure(this.adjustmentLevel.exposure);\n this.setOpacity(this.adjustmentLevel.opacity);\n this.setBlur(this.adjustmentLevel.blur);\n };\n ImageEditor.prototype.destroySubComponents = function () {\n var inputElement = this.element.querySelectorAll('input.e-control');\n var btnElement = this.element.querySelectorAll('button.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-color-picker')) {\n getComponent(inputElement[i], 'color-picker').destroy();\n detach(select('input#' + inputElement[i].id, this.element));\n }\n }\n for (var i = 0, len = btnElement.length; i < len; i++) {\n if (btnElement[i].classList.contains('e-dropdown-btn')) {\n getComponent(btnElement[i], 'dropdown-btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n else if (btnElement[i].classList.contains('e-btn')) {\n getComponent(btnElement[i], 'btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n }\n };\n ImageEditor.prototype.updateTheme = function () {\n if (this.theme !== '') {\n this.theme = this.toPascalCase(this.theme);\n }\n };\n ImageEditor.prototype.toPascalCase = function (str) {\n var strArr = str.toLowerCase().split('-');\n for (var i = 0; i < strArr.length; i++) {\n strArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);\n }\n return strArr.join('');\n };\n ImageEditor.prototype.createCanvas = function () {\n var height = this.toolbarHeight;\n this.element.style.width = this.width;\n this.element.style.height = this.height;\n var canvasWrapper = this.element.appendChild(this.createElement('div', { id: this.element.id + '_canvasWrapper',\n className: 'e-canvas-wrapper', attrs: { style: 'height:' + (this.element.offsetHeight - height) + 'px; width:' +\n (this.element.offsetWidth)\n + 'px; position: relative; overflow: hidden; margin: 0 auto;' }\n }));\n this.lowerCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_lowerCanvas', attrs: { name: 'canvasImage' }\n }));\n this.upperCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_upperCanvas', attrs: { name: 'canvasImage' }\n }));\n this.inMemoryCanvas = this.createElement('canvas', {\n id: this.element.id + '_inMemoryCanvas', attrs: { name: 'canvasImage' }\n });\n this.textBox = canvasWrapper.appendChild(this.createElement('textarea', {\n id: this.element.id + '_textBox', attrs: { name: 'textBox' }\n }));\n this.textBox.setAttribute('spellcheck', 'false');\n this.upperCanvas.width = this.lowerCanvas.width = this.inMemoryCanvas.width = this.element.offsetWidth;\n this.upperCanvas.height = this.lowerCanvas.height = this.inMemoryCanvas.height = (this.element.offsetHeight - this.toolbarHeight);\n this.upperCanvas.style.position = this.lowerCanvas.style.position = this.textBox.style.position = 'absolute';\n this.textBox.style.backgroundColor = 'transparent';\n this.textBox.style.display = 'none';\n this.textBox.style.resize = 'none';\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.baseImg = this.createElement('img', {\n id: this.element.id + '_orgImg', attrs: { name: 'Image', crossorigin: 'anonymous' }\n });\n this.upperCanvas.style.cursor = 'default';\n this.upperCanvas.style.display = 'none';\n this.upperContext = this.upperCanvas.getContext('2d');\n this.inMemoryContext = this.inMemoryCanvas.getContext('2d');\n };\n ImageEditor.prototype.createToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_toolbarArea', className: 'e-toolbar-area'\n }));\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarItems = { cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) };\n if (isNullOrUndefined(this.defToolbarItems)) {\n this.defToolbarItems = [];\n }\n this.defToolbarItems.push(toolbarItems);\n var toolbarArea = document.getElementById(this.element.id + '_toolbarArea');\n var toolbar_1 = this.createElement('div', {\n id: this.element.id + '_toolbar'\n });\n toolbarArea.appendChild(toolbar_1);\n var uploadItems = [\n {\n cssClass: 'e-image-upload',\n align: 'Left', type: 'Input',\n template: new Uploader({\n selected: function () {\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n }\n })\n }\n ];\n new Toolbar({ items: uploadItems, width: '100%',\n created: function () {\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this) }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n }\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar'))) {\n this.toolbarHeight = document.getElementById(this.element.id + '_toolbar').clientHeight;\n }\n }\n else {\n this.toolbarHeight = 0;\n }\n };\n ImageEditor.prototype.createContextualToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', { id: this.element.id + '_contextualToolbarArea',\n className: 'e-contextual-toolbar-wrapper e-hide', attrs: { style: 'position: absolute;' }\n }));\n var toolbarArea = document.getElementById(this.element.id + '_contextualToolbarArea');\n var toolbar_2 = this.createElement('div', { id: this.element.id + '_contextualToolbar' });\n toolbarArea.appendChild(toolbar_2);\n }\n };\n ImageEditor.prototype.updateContextualToolbar = function (type, cType) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n var contextualToolbarArea = this.element.querySelector('#' + this.element.id + '_contextualToolbarArea');\n if (!isNullOrUndefined(toolbarArea) && !isNullOrUndefined(contextualToolbarArea)) {\n contextualToolbarArea.classList.remove('e-hide');\n contextualToolbarArea.style.left = toolbarArea.offsetLeft + 'px';\n }\n if (type === 'filter') {\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')) && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(true);\n }\n this.refreshSlider();\n this.initFilterToolbarItem();\n }\n else {\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar'))\n && document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n this.refreshSlider();\n this.renderSlider(cType);\n }\n if (Browser.isDevice) {\n var cHt = contextualToolbarArea.offsetHeight;\n var ht = this.element.querySelector('#' + this.element.id + '_canvasWrapper').offsetHeight;\n contextualToolbarArea.style.top = this.toolbarHeight + ht - cHt + 'px';\n }\n else {\n contextualToolbarArea.style.top = this.toolbarHeight + 1 + 'px';\n }\n }\n };\n ImageEditor.prototype.createBottomToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_bottomToolbarArea', className: 'e-bottom-toolbar'\n }));\n if (!this.toolbarTemplate) {\n document.getElementById(this.element.id + '_canvasWrapper').style.height = (this.element.offsetHeight\n - this.toolbarHeight * 2) - 3 + 'px';\n var toolbarArea = document.getElementById(this.element.id + '_bottomToolbarArea');\n var toolbarElem = this.createElement('div', {\n id: this.element.id + '_bottomToolbar'\n });\n toolbarArea.appendChild(toolbarElem);\n }\n this.initBottomToolbar();\n }\n };\n ImageEditor.prototype.initBottomToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var items = this.getMainToolbarItem();\n new Toolbar({ items: items, width: '100%',\n created: function () {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this)\n }, '#' + this.element.id + '_bottomToolbar');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_3 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_3.refreshOverflow();\n }\n }\n }\n };\n ImageEditor.prototype.toolbarTemplateFn = function () {\n var template;\n var templateID = this.element.id + '_toolbar';\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n if (this.toolbarTemplate) {\n this.toolbarFn = this.templateParser(this.toolbarTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n }\n else {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n }\n toolbarArea.appendChild(template);\n this.renderReactTemplates();\n }\n };\n ImageEditor.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n ImageEditor.prototype.getLeftToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (!isOkBtn) {\n toolbarItems.push({ cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) });\n toolbarItems.push({ visible: false, cssClass: 'e-image-position e-btn e-flat', tooltipText: 'Position', align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomOut') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomOut', prefixIcon: 'e-icons e-zoom-out', cssClass: 'top-icon e-dec-zoom',\n tooltipText: this.l10n.getConstant('ZoomOut'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomIn') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomIn', prefixIcon: 'e-icons e-zoom-in', cssClass: 'top-icon e-inc-zoom',\n tooltipText: this.l10n.getConstant('ZoomIn'), align: 'Left' });\n }\n var tempToolbarItems = this.processToolbar('left');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getRightToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (isOkBtn) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Reset') > -1)) {\n toolbarItems.push({ id: this.element.id + '_reset', prefixIcon: 'e-icons e-btn-reset', cssClass: 'top-icon e-img-reset',\n tooltipText: this.l10n.getConstant('Reset'), align: 'Right' });\n }\n if (!isOkBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Save') > -1)) {\n toolbarItems.push({ id: this.element.id + '_save', prefixIcon: 'e-icons e-btn-save', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Save'), align: 'Right', template: '<button id=\"' + this.element.id + '_saveBtn\"></button>' });\n }\n }\n var tempToolbarItems = this.processToolbar('right');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getMainToolbarItem = function (isApplyOption) {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Crop') > -1)) {\n toolbarItems.push({ id: this.element.id + '_crop', tooltipText: this.l10n.getConstant('Crop'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_cropBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Annotate') > -1)) {\n toolbarItems.push({ id: this.element.id + '_annotation', tooltipText: this.l10n.getConstant('Annotation'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_annotationBtn\"></button>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Transform') > -1)) {\n toolbarItems.push({ id: this.element.id + '_transform', tooltipText: this.l10n.getConstant('Transform'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_transformBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Finetune') > -1)) {\n toolbarItems.push({ id: this.element.id + '_adjustment', prefixIcon: 'e-icons e-adjustment', cssClass: 'top-icon e-adjustment',\n tooltipText: this.l10n.getConstant('Finetune'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Filter') > -1)) {\n toolbarItems.push({ id: this.element.id + '_filter', prefixIcon: 'e-icons e-filters', cssClass: 'top-icon e-filters',\n tooltipText: this.l10n.getConstant('Filter'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (isApplyOption) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getZoomToolbarItem = function () {\n var toolbarItems = [];\n if (this.factor > 1) {\n toolbarItems = [\n { id: this.element.id + '_pan', prefixIcon: 'e-icons e-pan', cssClass: 'top-icon e-img-pan',\n tooltipText: this.l10n.getConstant('Pan'), align: 'Left' }\n ];\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processToolbar = function (position) {\n var toolbarItems = [];\n if (this.toolbar) {\n for (var i = 0, len = this.toolbar.length; i < len; i++) {\n if (typeof (this.toolbar[i]) === 'object') {\n if (isNullOrUndefined(this.toolbar[i].align)) {\n if (position === 'left') {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n else if (this.toolbar[i].align.toLowerCase() === position) {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processSubToolbar = function (items) {\n var toolbarItems = [];\n if (items) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (typeof (items[i]) === 'object') {\n items[i].align = 'Center';\n toolbarItems.push(items[i]);\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.isToolbar = function () {\n return (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)\n || !isNullOrUndefined(this.toolbarTemplate));\n };\n ImageEditor.prototype.initToolbarItem = function (isApplyOption, isDevice, isOkBtn) {\n var _this = this;\n if (this.isToolbar()) {\n var leftItem = this.getLeftToolbarItem(isOkBtn);\n var rightItem = this.getRightToolbarItem(isOkBtn);\n var mainItem = this.getMainToolbarItem(isApplyOption);\n var zoomItem = this.getZoomToolbarItem();\n if (isDevice) {\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!isDevice) {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n }\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n var zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n var pan = document.querySelector('#' + this.element.id + '_pan');\n if (!isNullOrUndefined(pan) && this.factor === 1) {\n pan.style.display = 'none';\n }\n else if (!isNullOrUndefined(pan)) {\n pan.style.display = 'block';\n }\n if (this.isToolbar() && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_4 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_4.refreshOverflow();\n }\n }\n };\n ImageEditor.prototype.createLeftToolbarControls = function () {\n if (this.defToolbarItems !== undefined && this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n var uploadDiv = document.getElementById(this.element.id + '_toolbar')\n .querySelector('.e-image-upload');\n if (uploadDiv) {\n var uploadElem = uploadDiv.getElementsByTagName('input')[0];\n var uploadBtnElem = uploadDiv.getElementsByTagName('button')[0];\n uploadBtnElem.className = 'e-tbar-btn e-tbtn-txt e-btn top-icon';\n uploadBtnElem.innerHTML = '';\n uploadBtnElem.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons e-upload-icon e-icon-left'\n }));\n uploadElem.onchange = this.fileSelect.bind(this, uploadElem);\n }\n }\n };\n ImageEditor.prototype.renderAnnotationBtn = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Pen') > -1)) {\n items.push({ text: this.l10n.getConstant('Pen'), id: 'pen', iconCss: 'e-icons e-free-pen' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Line') > -1)) {\n items.push({ text: this.l10n.getConstant('Line'), id: 'line', iconCss: 'e-icons e-line' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Rectangle') > -1)) {\n items.push({ text: this.l10n.getConstant('Rectangle'), id: 'rectangle', iconCss: 'e-icons e-rectangle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Ellipse') > -1)) {\n items.push({ text: this.l10n.getConstant('Ellipse'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Text') > -1)) {\n items.push({ text: this.l10n.getConstant('Text'), id: 'text', iconCss: 'e-icons e-add-text' });\n }\n var drpDownBtn = new DropDownButton({ items: items, iconCss: 'e-icons e-annotation',\n cssClass: 'e-image-popup',\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n select: function (args) {\n var isCropSelection = false;\n var splitWords;\n if (_this.activeObj.shape !== undefined) {\n splitWords = _this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && _this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n _this.currObjType.isCustomCrop = false;\n if (isCropSelection || _this.togglePan) {\n _this.refreshActiveObj();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.refreshToolbar('main');\n }\n switch (args.item.id) {\n case 'pen':\n proxy.currentToolbar = 'pen';\n _this.freeHandDraw(true);\n break;\n case 'text':\n proxy.currentToolbar = 'text';\n _this.drawShapeText();\n break;\n default:\n proxy.currentToolbar = 'shapes';\n proxy.drawShape((args.item.id).toLowerCase());\n break;\n }\n _this.updateToolbarItems(_this.calcRatio());\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn.appendTo('#' + this.element.id + '_annotationBtn');\n };\n ImageEditor.prototype.renderCropBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CustomSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Custom'), id: 'custom', iconCss: 'e-icons e-custom' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CircleSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Circle'), id: 'circle', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('SquareSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Square'), id: 'square', iconCss: 'e-icons e-square' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RatioSelection') > -1)) {\n items.push({ text: '3:2', id: '3:2', iconCss: 'e-icons e-custom-a' });\n items.push({ text: '4:3', id: '4:3', iconCss: 'e-icons e-custom-b' });\n items.push({ text: '5:4', id: '5:4', iconCss: 'e-icons e-custom-c' });\n items.push({ text: '7:5', id: '7:5', iconCss: 'e-icons e-custom-d' });\n items.push({ text: '16:9', id: '16:9', iconCss: 'e-icons e-custom-e' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n items: items, select: this.cropSelect.bind(this),\n iconCss: 'e-icons e-select', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_cropBtn');\n };\n ImageEditor.prototype.renderTransformBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateLeft') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateLeft'), id: 'rotateleft', iconCss: 'e-icons e-anti-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateRight') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateRight'), id: 'rotateright', iconCss: 'e-icons e-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipHorizontal') > -1)) {\n items.push({ text: this.l10n.getConstant('HorizontalFlip'), id: 'horizontalflip', iconCss: 'e-icons e-horizontal-flip' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipVertical') > -1)) {\n items.push({ text: this.l10n.getConstant('VerticalFlip'), id: 'verticalflip', iconCss: 'e-icons e-vertical-flip' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n var ht = args.element.parentElement.offsetHeight;\n args.element.parentElement.style.display = 'none';\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n ht + 'px';\n args.element.parentElement.style.display = 'block';\n }\n },\n items: items, select: this.transformSelect.bind(this),\n iconCss: 'e-icons e-transform', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_transformBtn');\n };\n ImageEditor.prototype.renderSaveBtn = function () {\n var _this = this;\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var saveItems = [\n { text: 'JPEG', id: 'jpeg' },\n { text: 'PNG', id: 'png' },\n { text: 'SVG', id: 'svg' }\n ];\n var ddbElem = document.getElementById(this.element.id + '_saveBtn');\n if (ddbElem) {\n // Initialize the DropDownButton component.\n var saveDrpDownBtn = new DropDownButton({ items: saveItems, cssClass: 'e-caret-hide e-image-popup', iconCss: 'e-icons e-save',\n select: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n imageEditorObj.export(args.item.text);\n }\n });\n saveDrpDownBtn.appendTo('#' + this.element.id + '_saveBtn');\n }\n };\n ImageEditor.prototype.cropSelect = function (args) {\n var text = args.item.id;\n this.select(text);\n this.refreshToolbar('main', true, true);\n };\n ImageEditor.prototype.transformSelect = function (args) {\n var text = args.item.id;\n switch (text) {\n case 'rotateleft':\n this.rotate(-90);\n break;\n case 'rotateright':\n this.rotate(90);\n break;\n case 'horizontalflip':\n this.flip('Horizontal');\n break;\n case 'verticalflip':\n this.flip('Vertical');\n break;\n }\n };\n ImageEditor.prototype.getShapesToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fillColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_fillcolor',\n cssClass: 'top-icon e-fill', tooltipText: this.l10n.getConstant('FillColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_fillColorBtn\"></button>' });\n }\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_strokecolor',\n cssClass: 'top-icon e-stroke', tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_borderColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ id: this.element.id + '_strokeWidth', cssClass: 'top-icon e-size', tooltipText: 'Stroke Width', align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_borderWidthBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initShapesToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getShapesToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createShapeColor(items);\n _this.createShapeBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'shapes' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createShapeColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fillColor') > -1) {\n this.element.querySelector('.e-template.e-fill').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_fill'\n }));\n var fillColor = new ColorPicker({\n modeSwitcher: false, noColor: true, value: '',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-fill-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n if (args.currentValue.rgba === '') {\n fillDDB_1.element.children[0].classList.add('e-nocolor-item');\n }\n else {\n fillDDB_1.element.children[0].classList.remove('e-nocolor-item');\n fillDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n }\n fillDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_fill');\n var fillDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fillDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-fill-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fillColorBtn');\n fillColor.inline = true;\n this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview').classList.add('e-nocolor-item');\n }\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-stroke').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_stroke'\n }));\n var strokeColor = new ColorPicker({\n modeSwitcher: false, noColor: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-stroke-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_stroke');\n var strokeDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-stroke-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_borderColorBtn');\n strokeColor.inline = true;\n this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview').style.background = '#fff';\n }\n };\n ImageEditor.prototype.createShapeBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n var ratio = this.calcRatio();\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_borderWidthBtn');\n var spanElem_1 = document.createElement('span');\n spanElem_1.innerHTML = this.l10n.getConstant('Small');\n spanElem_1.className = 'e-shape-stroke-width';\n strokeWidthBtn.appendChild(spanElem_1);\n // Initialize the DropDownButton component.\n var drpDownBtn_1 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_1.innerHTML;\n if (activeBtn !== '') {\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n }\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n spanElem_1.textContent = args.item.text;\n _this.activeObj.strokeSettings.strokeWidth = parseInt(args.item.id, 10);\n if (_this.lowerCanvas.width > _this.lowerCanvas.height) {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.width + ratio.height) / _this.factor);\n }\n else {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.height + ratio.width) / _this.factor);\n }\n _this.strokeSettings.strokeWidth = _this.activeObj.strokeSettings.strokeWidth;\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true), previousObj: objColl, factor: _this.factor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_5 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_5.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_6 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_1.appendTo('#' + this.element.id + '_borderWidthBtn');\n }\n };\n ImageEditor.prototype.getTextToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fontFamily') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontFamily', cssClass: 'top-icon e-img-font-family',\n tooltipText: this.l10n.getConstant('FontFamily'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontFamilyBtn\"></button>' });\n }\n if (items.indexOf('fontStyle') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontStyle', cssClass: 'top-icon e-img-font-style',\n tooltipText: this.l10n.getConstant('FontStyle'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontStyleBtn\"></button>' });\n }\n if (items.indexOf('fontSize') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontSize', cssClass: 'top-icon e-img-font-size',\n tooltipText: this.l10n.getConstant('FontSize'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontSizeBtn\"></button>' });\n }\n if (items.indexOf('fontColor') > -1) {\n toolbarItems.push({ cssClass: 'top-icon e-text-font-color', id: this.element.id + '_text_strokecolor',\n tooltipText: this.l10n.getConstant('FontColor'), align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_fontColorBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFontFamilyItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'arial', text: 'ABC' }, { id: 'calibri', text: 'ABC' }, { id: 'georgia', text: 'ABC' },\n { id: 'roboto', text: 'ABC' }, { id: 'tahoma', text: 'ABC' }];\n }\n return [{ id: 'arial', text: 'Arial' }, { id: 'calibri', text: 'Calibri' }, { id: 'georgia', text: 'Georgia' },\n { id: 'roboto', text: 'Roboto' }, { id: 'tahoma', text: 'Tahoma' }];\n };\n ImageEditor.prototype.getFontSizeItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'default', text: this.l10n.getConstant('ABC') }, { id: 'bold', text: this.l10n.getConstant('ABC') },\n { id: 'italic', text: this.l10n.getConstant('ABC') }, { id: 'bolditalic', text: this.l10n.getConstant('ABC') }];\n }\n return [{ id: 'default', text: this.l10n.getConstant('Default') }, { id: 'bold', text: this.l10n.getConstant('Bold') },\n { id: 'italic', text: this.l10n.getConstant('Italic') }, { id: 'bolditalic', text: this.l10n.getConstant('BoldItalic') }];\n };\n ImageEditor.prototype.initTextToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getTextToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createTextColor(items);\n _this.createTextBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'text' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createTextColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fontColor') > -1) {\n this.element.querySelector('.e-template.e-text-font-color').appendChild(this.createElement('input', {\n id: this.element.id + '_text_font'\n }));\n var fontColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-text-fontt-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n if (proxy.textBox.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n }\n else if (proxy.textBox.style.display === 'block') {\n proxy.textBox.style.color = args.currentValue.hex;\n var temp = proxy.activeObj.strokeSettings.strokeColor;\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = temp;\n }\n else if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_2.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_2.toggle();\n }\n }, '#' + this.element.id + '_text_font');\n var strokeDDB_2 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-text-fontt-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fontColorBtn');\n fontColor.inline = true;\n this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.pushActItemIntoObj = function () {\n if (this.textBox.style.display === 'none') {\n this.objColl.push(this.activeObj);\n }\n else {\n var temp = extend({}, this.activeObj, {}, true);\n this.setTextBoxStylesToActObj();\n this.objColl.push(this.activeObj);\n this.activeObj = temp;\n }\n };\n ImageEditor.prototype.createTextBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n if (items.indexOf('fontFamily') > -1) {\n var fontNameBtn = document.getElementById(this.element.id + '_fontFamilyBtn');\n var spanElem_2 = document.createElement('span');\n if (Browser.isDevice) {\n spanElem_2.innerHTML = 'ABC';\n spanElem_2.setAttribute('style', 'font-family: arial');\n }\n else {\n spanElem_2.innerHTML = 'Arial';\n }\n spanElem_2.className = 'e-text-font-family';\n fontNameBtn.appendChild(spanElem_2);\n var fontFamilyBtn_1 = new DropDownButton({ items: this.getFontFamilyItems(),\n cssClass: 'e-font-family',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n args.element.setAttribute('style', 'font-family:' + args.element.id);\n },\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontFamilyBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var fontFamily;\n if (_this.textBox.style.display === 'block') {\n fontFamily = _this.textBox.style.fontFamily;\n }\n else {\n fontFamily = _this.activeObj.textSettings.fontFamily;\n }\n args.element.querySelector('[id *= ' + '\"' + fontFamily.toLowerCase()\n + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n spanElem_2.textContent = args.item.text;\n if (Browser.isDevice) {\n spanElem_2.setAttribute('style', 'font-family:' + args.item.id);\n }\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontFamily;\n _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n var width = _this.activeObj.activePoint.width +\n _this.activeObj.textSettings.fontSize * 0.25;\n _this.textBox.style.width = width / ratio.width + 'px';\n _this.textBox.style.fontFamily = _this.toPascalCase(args.item.id);\n _this.activeObj.textSettings.fontFamily = temp;\n _this.updateFontStyles();\n }\n else {\n _this.textSettings.fontFamily = _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontFamilyBtn_1.appendTo('#' + this.element.id + '_fontFamilyBtn');\n }\n if (items.indexOf('fontStyle') > -1) {\n var fontStyleBtnElem = document.getElementById(this.element.id + '_fontStyleBtn');\n var span1Elem_1 = document.createElement('span');\n if (Browser.isDevice) {\n span1Elem_1.innerHTML = this.l10n.getConstant('ABC');\n }\n else {\n span1Elem_1.innerHTML = this.l10n.getConstant('Default');\n }\n span1Elem_1.className = 'e-text-font-style';\n fontStyleBtnElem.appendChild(span1Elem_1);\n var fontStyleBtn_1 = new DropDownButton({ items: this.getFontSizeItems(),\n cssClass: 'e-font-style',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n if (Browser.isDevice) {\n if (args.element.id === 'bold') {\n args.element.setAttribute('style', 'font-weight: bold');\n }\n else if (args.element.id === 'italic') {\n args.element.setAttribute('style', 'font-style: italic');\n }\n else if (args.element.id === 'bolditalic') {\n args.element.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n }\n },\n open: function (args) {\n var fontStyle = 'default';\n if (_this.textBox.style.display === 'block') {\n if (_this.textBox.style.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n else {\n if (_this.activeObj.textSettings.bold) {\n fontStyle = 'bold';\n }\n if (_this.activeObj.textSettings.italic) {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontStyleBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n args.element.querySelector('[id *= ' + '\"' + fontStyle + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n if (Browser.isDevice) {\n if (args.item.id === 'bold') {\n span1Elem_1.setAttribute('style', 'font-weight: bold');\n }\n else if (args.item.id === 'italic') {\n span1Elem_1.setAttribute('style', 'font-style: italic');\n }\n else if (args.item.id === 'bolditalic') {\n span1Elem_1.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n _this.applyFontStyle(args.item.id, ratio);\n }\n else {\n span1Elem_1.textContent = args.item.text;\n _this.applyFontStyle(args.item.id, ratio);\n }\n }\n });\n fontStyleBtn_1.appendTo('#' + this.element.id + '_fontStyleBtn');\n }\n if (items.indexOf('fontSize') > -1) {\n var fontSizeBtnElem = document.getElementById(this.element.id + '_fontSizeBtn');\n var fontSizeSpanElem_1 = document.createElement('span');\n var fontSizes = this.getFontSizes();\n fontSizeSpanElem_1.innerHTML = fontSizes[0].text;\n fontSizeSpanElem_1.className = 'e-text-font-size';\n fontSizeBtnElem.appendChild(fontSizeSpanElem_1);\n var fontSizeBtn_1 = new DropDownButton({\n cssClass: 'e-font-size',\n items: fontSizes,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontSizeBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = fontSizeSpanElem_1.innerHTML;\n args.element.querySelector('[aria-label *= ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n fontSizeSpanElem_1.textContent = args.item.text;\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontSize;\n _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n var textStyle = '';\n if (_this.textBox.style.fontWeight === 'bold') {\n textStyle = 'bold ';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic ';\n }\n if (_this.textBox.style.fontWeight === 'bold' && _this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic bold ';\n }\n _this.upperContext.font = textStyle + _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.textBox.style.fontFamily;\n var rows = _this.textBox.value.split('\\n');\n var text = _this.getMaxText(true);\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = width + 'px';\n _this.textBox.style.height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25) + 'px';\n _this.activeObj.textSettings.fontSize = temp;\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n _this.textBox.style.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10) + 'px';\n if (_this.textBox.style.fontFamily === 'georgia') {\n _this.textBox.style.width = parseFloat(_this.textBox.style.width) + parseFloat(_this.textBox.style.fontSize) + 'px';\n }\n }\n else {\n _this.textSettings.fontSize = _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n var rows = _this.activeObj.keyHistory.split('\\n');\n var text = _this.getMaxText();\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (_this.activeObj.textSettings.fontSize +\n _this.activeObj.textSettings.fontSize * 0.25);\n _this.setTextSelection(width, height);\n _this.updateActiveObject(ratio, _this.activeObj.activePoint, _this.activeObj);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontSizeBtn_1.appendTo('#' + this.element.id + '_fontSizeBtn');\n }\n };\n ImageEditor.prototype.getFontSizes = function () {\n var items = [];\n this.fontSizeColl = [];\n var fontSize;\n if (this.degree === 0 || this.degree % 180 === 0) {\n fontSize = this.lowerCanvas.width / 20;\n }\n else {\n fontSize = this.lowerCanvas.height / 20;\n }\n for (var i = 1; i <= 10; i++) {\n this.fontSizeColl.push({ text: (i * (Math.round(fontSize / 2))).toString() });\n items.push({ text: (i.toString()) });\n }\n return items;\n };\n ImageEditor.prototype.getTextAreaWidth = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n return width;\n };\n ImageEditor.prototype.updateObjColl = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.objColl.push(this.activeObj);\n this.objColl.pop();\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n };\n ImageEditor.prototype.applyFontStyle = function (item, ratio) {\n this.pushActItemIntoObj();\n this.objColl.pop();\n switch (item) {\n case 'default':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'bold':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'italic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n case 'bolditalic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n }\n };\n ImageEditor.prototype.initZoomToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'zoom' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_7 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_7.refreshOverflow();\n }\n };\n ImageEditor.prototype.contextualToolbarClicked = function (args) {\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n document.getElementById(args.item.id + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n this.currObjType.isFiltered = true;\n var type = args.item.id.replace(this.element.id, '').split('_')[1];\n var imageFiltering = { filter: this.toPascalCase(type) };\n this.trigger('imageFiltering', imageFiltering);\n this.setFilter(type.toLowerCase());\n this.currentFilter = args.item.id;\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n var zoomIn;\n var type = args.item.id.replace(this.element.id + '_', '').toLowerCase();\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var isCropSelection = false;\n var panBtn;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!this.disabled) {\n switch (type) {\n case 'zoomin':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(.1);\n break;\n case 'zoomout':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(-.1);\n break;\n case 'pan':\n this.currObjType.isCustomCrop = this.currObjType.isFiltered = false;\n if (isCropSelection) {\n this.currObjType.isCustomCrop = false;\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshToolbar('main');\n }\n if (this.togglePan) {\n this.cancelPan();\n this.disablePan = true;\n }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.add('e-selected-btn');\n imageEditorObj.pan(true);\n this.disablePan = false;\n }\n zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n break;\n case 'cancel':\n if (this.textBox.style.display === 'block') {\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.textBox.style.transform = '';\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.lowerContext.filter = this.adjustmentValue = this.initialAdjustmentValue = this.tempAdjustmentValue;\n this.currentFilter = this.tempFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isFiltered = false;\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n this.adjustmentLevel = extend({}, this.tempAdjustmentLevel, {}, true);\n if (this.currentFilter === this.element.id + '_sharpen' || this.currentFilter === this.element.id + '_blackandwhite'\n || this.tempSharpenFilter || this.tempBWFilter) {\n if (this.currentFilter === this.element.id + '_sharpen' || this.tempSharpenFilter) {\n this.setSharpness(true);\n }\n else if (this.currentFilter === this.element.id + '_blackandwhite' || this.tempBWFilter) {\n this.setBlackAndWhiteFilter(true);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n this.tempSharpenFilter = this.tempBWFilter = false;\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n this.cancelItems();\n break;\n case 'ok':\n this.okBtn();\n break;\n case 'reset':\n imageEditorObj.reset();\n break;\n case 'adjustment':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('adjustment');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.unselectBtn();\n this.currObjType.isFiltered = true;\n this.refreshToolbar('color', null, null, null, type);\n document.getElementById(this.element.id + '_' + type).classList.add('e-selected-btn');\n break;\n case 'filter':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('filter');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'blackandwhite':\n case 'sepia':\n case 'invert':\n case 'sharpen':\n this.currObjType.isFiltered = true;\n this.setFilter(type);\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\n };\n ImageEditor.prototype.okBtn = function () {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n var selElem = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selElem) {\n this.currentFilter = selElem.children[0].children[0].id.replace('Canvas', '');\n }\n if (isCropSelection) {\n this.crop();\n }\n else if (this.togglePen) {\n this.freeHandDraw(false);\n }\n else if (this.textBox.style.display === 'block') {\n this.redrawActObj();\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.initialAdjustmentValue = this.canvasFilter = this.lowerContext.filter;\n this.currObjType.isFiltered = false;\n }\n else {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n };\n ImageEditor.prototype.unselectBtn = function () {\n if (document.querySelector('#' + this.element.id + '_brightness').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_brightness').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_contrast').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_contrast').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_hue').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_hue').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_saturation').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_saturation').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_opacity').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_opacity').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_blur').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_blur').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_exposure').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_exposure').classList.remove('e-selected-btn');\n }\n };\n ImageEditor.prototype.refreshSlider = function () {\n var sliderWrapper = document.querySelector('#' + this.element.id + '_sliderWrapper');\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var slider = document.querySelector('.e-slider');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(sliderWrapper) && !isNullOrUndefined(slider)) {\n slider.ej2_instances[0].destroy();\n sliderWrapper.remove();\n }\n };\n ImageEditor.prototype.updateAdjustment = function (type, value, isPreview) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var values = [];\n var opacityValue;\n var brightnessValue;\n if (splitWords[4] !== undefined) {\n opacityValue = parseFloat(splitWords[4].split('(')[1]);\n }\n if (splitWords[0] !== undefined) {\n brightnessValue = parseFloat(splitWords[0].split('(')[1]);\n }\n var brightness = this.getFilterValue(this.adjustmentLevel.brightness);\n var saturation = this.getFilterValue(this.adjustmentLevel.saturation);\n if (type !== 'brightness' && type !== 'contrast' && type !== 'hue' && type !== 'saturation' && type !== 'exposure'\n && type !== 'opacity' && type !== 'blur') {\n if (isNullOrUndefined(isPreview) && (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw)) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var temp_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp_1;\n }\n }\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n var saturate;\n var bright;\n var contrast;\n var saturatePercentage;\n var saturatePercent;\n var tempFilter;\n var temp;\n switch (type) {\n case 'brightness':\n if (splitWords[3].split) {\n if (parseFloat(splitWords[3].split('(')[1]) !== 100) {\n value += 0.1;\n }\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'contrast':\n splitWords[1] = 'contrast(' + value + '%)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'hue':\n splitWords[2] = 'hue-rotate(' + value + 'deg)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'saturation':\n splitWords[3] = 'saturate(' + value + '%)';\n if (saturation !== 1) {\n splitWords[0] = 'brightness(' + (brightnessValue + 0.1) + ')';\n }\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'opacity':\n if (parseFloat(splitWords[0].split('(')[1]) !== 1) {\n value -= 0.2;\n }\n splitWords[4] = 'opacity(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'blur':\n splitWords[5] = 'blur(' + value + 'px)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'exposure':\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n if (value > 1) {\n value -= 1;\n value += brightness;\n }\n else if (value < 1) {\n value = 1 - value;\n value = brightness - value;\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'chrome':\n saturate = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturate *= 100;\n value = saturate + (saturate * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'cold':\n // Adjusting Brightness\n bright = this.getFilterValue(this.adjustmentLevel.brightness);\n bright *= 100;\n value = bright * 0.9;\n splitWords[0] = 'brightness(' + value + '%)';\n // Adjusting Contrast\n contrast = this.getFilterValue(this.adjustmentLevel.contrast);\n contrast *= 100;\n value = contrast + (contrast * 0.5);\n splitWords[1] = 'contrast(' + value + '%)';\n // Adjusting Saturation\n saturatePercentage = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercentage *= 100;\n value = saturatePercentage;\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'warm':\n saturatePercent = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercent *= 100;\n value = saturatePercent + (saturatePercent * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n splitWords[6] = 'sepia(25%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'grayscale':\n splitWords[7] = 'grayscale(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'blackandwhite':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n break;\n case 'sepia':\n splitWords[6] = 'sepia(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'invert':\n splitWords[8] = 'invert(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n break;\n case 'sharpen':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setSharpness(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n }\n break;\n }\n if (type !== 'sharpen' && type !== 'blackandwhite') {\n if (isNullOrUndefined(isPreview)) {\n if (type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n this.lowerContext.filter = splitWords.join(' ');\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + opacityValue + ')';\n }\n else if (saturation !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n if (type === 'exposure' && brightness !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n if (isNullOrUndefined(isPreview)) {\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n }\n var tempFilter_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter_1;\n if (brightness === 1) {\n this.isBrightnessAdjusted = false;\n }\n else {\n this.isBrightnessAdjusted = true;\n }\n }\n var filter = splitWords.join(' ');\n return filter;\n };\n ImageEditor.prototype.updateBrightnessFilter = function () {\n var splitWords = this.lowerContext.filter.split(' ');\n if (this.isBrightnessAdjusted && splitWords.length > 0 && !isNullOrUndefined(splitWords[4])) {\n var opacityValue = parseFloat(splitWords[4].split('(')[1]);\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n this.lowerContext.filter = splitWords.join(' ');\n }\n };\n ImageEditor.prototype.autoEnablePan = function () {\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n this.pan(false);\n this.disablePan = false;\n }\n else if (!this.disablePan) {\n this.pan(true);\n }\n else if (this.disablePan) {\n this.pan(false);\n }\n };\n ImageEditor.prototype.setTempFilterValue = function (brightness, isPreview, splitWords, type) {\n if (isPreview && brightness !== 1) {\n var tempSplitWords = this.lowerContext.filter.split(' ');\n tempSplitWords[4] = splitWords[4];\n this.lowerContext.filter = tempSplitWords.join(' ');\n }\n else if (isPreview && type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n return splitWords;\n };\n ImageEditor.prototype.getDefaultFilter = function (splitWords) {\n var values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n return splitWords;\n };\n ImageEditor.prototype.setAdjustment = function (type) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var value;\n var valueArr;\n switch (type) {\n case 'brightness':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.brightness = this.setFilterValue(value);\n break;\n case 'contrast':\n valueArr = splitWords[1].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.contrast = this.setFilterValue(value);\n break;\n case 'hue':\n valueArr = splitWords[2].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 3;\n this.adjustmentLevel.hue = value;\n break;\n case 'saturation':\n valueArr = splitWords[3].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.saturation = this.setSaturationFilterValue(value);\n break;\n case 'opacity':\n valueArr = splitWords[4].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n if (value === 0.45) {\n value = 40;\n }\n else if (value === 0.40) {\n value = 30;\n }\n else if (value === 0.35) {\n value = 20;\n }\n else if (value === 0.30) {\n value = 10;\n }\n else if (value === 0.25) {\n value = 0;\n }\n else {\n value *= 100;\n }\n this.adjustmentLevel.opacity = value;\n break;\n case 'blur':\n valueArr = splitWords[5].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value *= 20;\n this.adjustmentLevel.blur = value;\n break;\n case 'exposure':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.exposure = this.setFilterValue(value);\n break;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.renderSlider = function (type) {\n var _this = this;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_contextualToolbarArea');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n var labelWrapper = document.querySelector('#' + this.element.id + '_labelWrapper');\n if (!hdrWrapper && !isNullOrUndefined(canvasWrapper)) {\n hdrWrapper = canvasWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_headWrapper',\n styles: 'position: relative'\n }));\n labelWrapper = hdrWrapper.appendChild(this.createElement('label', {\n id: this.element.id + '_labelWrapper',\n styles: Browser.isDevice ? 'position: absolute; top: 25%; left: calc(50% - 150px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n : 'position: absolute; top: 25%; left: calc(50% - 226px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n }));\n }\n else {\n hdrWrapper.style.display = 'block';\n }\n labelWrapper.textContent = this.l10n.getConstant(this.toPascalCase(type));\n var sliderWrapper = hdrWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_sliderWrapper',\n styles: 'position: absolute'\n }));\n var value = this.getCurrAdjustmentValue(type);\n var min;\n var max;\n var slider;\n if (type === 'brightness' || type === 'contrast' || type === 'saturation' || type === 'exposure') {\n if (this.finetuneSettings) {\n if (type === 'brightness' && this.finetuneSettings.brightness) {\n min = this.finetuneSettings.brightness.min;\n max = this.finetuneSettings.brightness.max;\n }\n else if (type === 'contrast' && this.finetuneSettings.contrast) {\n min = this.finetuneSettings.contrast.min;\n max = this.finetuneSettings.contrast.max;\n }\n else if (type === 'saturation' && this.finetuneSettings.saturation) {\n min = this.finetuneSettings.saturation.min;\n max = this.finetuneSettings.saturation.max;\n }\n else if (type === 'exposure' && this.finetuneSettings.exposure) {\n min = this.finetuneSettings.exposure.min;\n max = this.finetuneSettings.exposure.max;\n }\n else {\n min = -100;\n max = 100;\n }\n }\n else {\n min = -100;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n else if (type === 'hue' || type === 'blur' || type === 'opacity') {\n if (this.finetuneSettings) {\n if (type === 'hue' && this.finetuneSettings.hue) {\n min = this.finetuneSettings.hue.min;\n max = this.finetuneSettings.hue.max;\n }\n else if (type === 'blur' && this.finetuneSettings.blur) {\n min = this.finetuneSettings.blur.min;\n max = this.finetuneSettings.blur.max;\n }\n else if (type === 'opacity' && this.finetuneSettings.opacity) {\n min = this.finetuneSettings.opacity.min;\n max = this.finetuneSettings.opacity.max;\n }\n else {\n min = 0;\n max = 100;\n }\n }\n else {\n min = 0;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n slider.appendTo('#' + this.element.id + '_sliderWrapper');\n sliderWrapper.style.left = (parseFloat(canvasWrapper.style.width) - parseFloat(slider.width)) / 2 + 'px';\n };\n ImageEditor.prototype.getCurrAdjustmentValue = function (type) {\n var value;\n switch (type) {\n case 'brightness':\n value = this.adjustmentLevel.brightness;\n break;\n case 'contrast':\n value = this.adjustmentLevel.contrast;\n break;\n case 'hue':\n value = this.adjustmentLevel.hue;\n break;\n case 'saturation':\n value = this.adjustmentLevel.saturation;\n break;\n case 'opacity':\n value = this.adjustmentLevel.opacity;\n break;\n case 'blur':\n value = this.adjustmentLevel.blur;\n break;\n case 'exposure':\n value = this.adjustmentLevel.exposure;\n break;\n }\n return value;\n };\n ImageEditor.prototype.setCurrAdjustmentValue = function (type, value) {\n var fineTuneValueChanging = { finetune: this.toPascalCase(type), value: value };\n this.trigger('fineTuneValueChanging', fineTuneValueChanging);\n switch (type) {\n case 'brightness':\n this.setBrightness(value);\n break;\n case 'contrast':\n this.setContrast(value);\n break;\n case 'hue':\n this.setHue(value);\n break;\n case 'saturation':\n this.setSaturation(value);\n break;\n case 'opacity':\n this.setOpacity(value);\n break;\n case 'blur':\n this.setBlur(value);\n break;\n case 'exposure':\n this.setExposure(value);\n break;\n }\n };\n ImageEditor.prototype.cancelPan = function () {\n this.applyActObj();\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.remove('e-selected-btn');\n this.pan(false);\n };\n ImageEditor.prototype.callMainToolbar = function (isApplyBtn, isZooming) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n };\n ImageEditor.prototype.cancelItems = function () {\n var ratio = this.calcRatio();\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.togglePen) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else if (this.activeObj.shape === 'text') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n if (this.activeObj.keyHistory === 'Enter Text' && this.activeObj.activePoint.startX === this.textStartPoints.x\n && this.activeObj.activePoint.startY === this.textStartPoints.y) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawShapeText();\n }\n else {\n this.redrawText(ratio);\n this.redrawShape(this.activeObj);\n if (!isCropSelection && this.activeObj.topLeftCircle !== undefined) {\n this.applyActObj();\n }\n this.clearSelection();\n }\n this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n }\n else if (this.activeObj.shape === 'rectangle' || this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.redrawShape(this.activeObj);\n this.applyActObj();\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n };\n ImageEditor.prototype.gradient = function (a, b) {\n return (b.y - a.y) / (b.x - a.x);\n };\n ImageEditor.prototype.applyPenDraw = function () {\n if (this.togglePen && this.factor === 1 && !this.currObjType.isZoomed) {\n this.apply();\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else {\n var tempCanvas = this.lowerCanvas.appendChild(this.createElement('canvas', {\n id: this.element.id + '_tempCanvas', attrs: { name: 'canvasImage' }\n }));\n var tempContext = tempCanvas.getContext('2d');\n tempCanvas.width = this.lowerCanvas.width;\n tempCanvas.height = this.lowerCanvas.height;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n for (var i = 0; i < this.penDrawColl.length; i++) {\n tempContext.lineWidth = 2 * this.penDrawColl[i].strokeWidth;\n tempContext.strokeStyle = this.penDrawColl[i].strokeColor;\n var nexP = void 0;\n var preP = void 0;\n var f = 0.3;\n var t = 1;\n tempContext.beginPath();\n tempContext.moveTo(this.penDrawColl[i].points[0].x, this.penDrawColl[i].points[0].y);\n var m = 0;\n var dx1 = 0;\n var dx2 = 0;\n var dy1 = 0;\n var dy2 = 0;\n preP = this.penDrawColl[i].points[0];\n for (var j = 1; j < this.penDrawColl[i].points.length; j++) {\n var curP = this.penDrawColl[i].points[j];\n nexP = this.penDrawColl[i].points[j + 1];\n if (nexP) {\n m = this.gradient(preP, nexP);\n dx2 = (nexP.x - curP.x) * -f;\n dy2 = dx2 * m * t;\n }\n else {\n dx2 = 0;\n dy2 = 0;\n }\n tempContext.bezierCurveTo(preP.x - dx1, preP.y - dy1, curP.x + dx2, curP.y + dy2, curP.x, curP.y);\n dx1 = dx2;\n dy1 = dy2;\n preP = curP;\n if (this.penDrawColl[i].points.length > 2) {\n this.penDrawColl[i].points.shift();\n }\n tempContext.stroke();\n }\n }\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n this.togglePen = false;\n var imgData = tempContext.getImageData(0, 0, tempCanvas.width, tempCanvas.height);\n var tempObj = void 0;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isZoomed = false;\n }\n };\n ImageEditor.prototype.redrawImgWithObj = function () {\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming, cType) {\n var args = { toolbarType: type };\n if (type !== 'filter' && type !== 'color') {\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (document.getElementById(this.element.id + '_bottomToolbar') && this.defToolbarItems.length > 0) {\n if (document.getElementById(this.element.id + '_bottomToolbar').className.indexOf('e-control') > -1) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n }\n }\n this.refreshSlider();\n switch (type) {\n case 'main':\n if (Browser.isDevice) {\n if (isCropping) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(false, true);\n }\n }\n else if (!Browser.isDevice || isZooming) {\n this.initToolbarItem(isApplyBtn, Browser.isDevice);\n }\n if (Browser.isDevice) {\n this.initBottomToolbar();\n }\n break;\n case 'shapes':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n if (this.activeObj.shape === 'line') {\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n }\n else {\n args.toolbarItems = ['fillColor', 'strokeColor', 'strokeWidth'];\n }\n this.trigger('toolbarUpdating', args);\n this.initShapesToolbarItem(args.toolbarItems);\n break;\n case 'text':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['fontFamily', 'fontStyle', 'fontSize', 'fontColor'];\n this.trigger('toolbarUpdating', args);\n this.initTextToolbarItem(args.toolbarItems);\n break;\n case 'pen':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n this.trigger('toolbarUpdating', args);\n this.initPenToolbarItem(args.toolbarItems);\n break;\n case 'pan':\n this.initZoomToolbarItem();\n break;\n case 'adjustment':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n this.initAdjustmentToolbarItem();\n break;\n case 'filter':\n this.updateContextualToolbar(type);\n break;\n case 'color':\n this.updateContextualToolbar(type, cType);\n break;\n }\n };\n ImageEditor.prototype.getAdjustmentToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Brightness') > -1)) {\n toolbarItems.push({ id: this.element.id + '_brightness', prefixIcon: 'e-icons e-brightness', cssClass: 'top-icon e-brightness',\n tooltipText: this.l10n.getConstant('Brightness'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Contrast') > -1)) {\n toolbarItems.push({ id: this.element.id + '_contrast', prefixIcon: 'e-icons e-contrast', cssClass: 'top-icon e-contrast',\n tooltipText: this.l10n.getConstant('Contrast'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Hue') > -1)) {\n toolbarItems.push({ id: this.element.id + '_hue', prefixIcon: 'e-icons e-fade', cssClass: 'top-icon e-fade',\n tooltipText: this.l10n.getConstant('Hue'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Saturation') > -1)) {\n toolbarItems.push({ id: this.element.id + '_saturation', prefixIcon: 'e-icons e-saturation', cssClass: 'top-icon e-saturation',\n tooltipText: this.l10n.getConstant('Saturation'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Exposure') > -1)) {\n toolbarItems.push({ id: this.element.id + '_exposure', prefixIcon: 'e-icons e-grain', cssClass: 'top-icon e-grain',\n tooltipText: this.l10n.getConstant('Exposure'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Opacity') > -1)) {\n toolbarItems.push({ id: this.element.id + '_opacity', prefixIcon: 'e-icons e-opacity', cssClass: 'top-icon e-opacity',\n tooltipText: this.l10n.getConstant('Opacity'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Blur') > -1)) {\n toolbarItems.push({ id: this.element.id + '_blur', prefixIcon: 'e-icons e-tint', cssClass: 'top-icon e-tint',\n tooltipText: this.l10n.getConstant('Blur'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFilterToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Default') > -1)) {\n toolbarItems.push({ id: this.element.id + '_default', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Default'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_defaultCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Default') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Chrome') > -1)) {\n toolbarItems.push({ id: this.element.id + '_chrome', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Chrome'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_chromeCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Chrome') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Cold') > -1)) {\n toolbarItems.push({ id: this.element.id + '_cold', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Cold'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_coldCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Cold') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Warm') > -1)) {\n toolbarItems.push({ id: this.element.id + '_warm', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Warm'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_warmCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Warm') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Grayscale') > -1)) {\n toolbarItems.push({ id: this.element.id + '_grayscale', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Grayscale'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_grayscaleCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Grayscale') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Sepia') > -1)) {\n toolbarItems.push({ id: this.element.id + '_sepia', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Sepia'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_sepiaCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Sepia') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Invert') > -1)) {\n toolbarItems.push({ id: this.element.id + '_invert', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Invert'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_invertCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Invert') + '</span></div></div>' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getPenToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_pen_strokecolor',\n cssClass: 'top-icon e-pen-stroke-color',\n tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_penColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', cssClass: 'top-icon e-size',\n tooltipText: this.l10n.getConstant('StrokeWidth'),\n align: 'Center', type: 'Input', template: '<button id=\"' + this.element.id + '_penStrokeWidth\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initPenToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getPenToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createPenColor(items);\n _this.createPenBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'pen' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createPenColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-pen-stroke-color').appendChild(this.createElement('input', {\n id: this.element.id + '_pen_stroke'\n }));\n var penColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-pen-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_3.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_3.toggle();\n }\n }, '#' + this.element.id + '_pen_stroke');\n var strokeDDB_3 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_3.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-pen-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_penColorBtn');\n penColor.inline = true;\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.createPenBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_penStrokeWidth');\n var spanElem_3 = document.createElement('span');\n if (isNullOrUndefined(this.penStrokeWidth)) {\n spanElem_3.innerHTML = this.l10n.getConstant('Small');\n }\n else {\n spanElem_3.innerHTML = this.getPenStroke(this.penStrokeWidth, this.calcRatio());\n }\n spanElem_3.className = 'e-pen-stroke-width';\n strokeWidthBtn.appendChild(spanElem_3);\n var drpDownBtn_2 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_3.innerHTML;\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n spanElem_3.textContent = args.item.text;\n _this.setPenStroke(args.item.id, ratio);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_8 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_8.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_9 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_2.appendTo('#' + this.element.id + '_penStrokeWidth');\n }\n };\n ImageEditor.prototype.setPenStroke = function (args, ratio) {\n switch (parseInt(args, 10)) {\n case 1:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.4;\n break;\n case 2:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n break;\n case 3:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.2;\n break;\n case 4:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.6;\n break;\n case 5:\n this.penStrokeWidth = (ratio.width + ratio.height) * 2;\n break;\n }\n };\n ImageEditor.prototype.getPenStroke = function (value, ratio) {\n var textContent = '';\n if (Math.round(value / 0.4) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XSmall');\n }\n else if (Math.round(value / 0.8) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Small');\n }\n else if (Math.round(value / 1.2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Medium');\n }\n else if (Math.round(value / 1.6) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Large');\n }\n else if (Math.round(value / 2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XLarge');\n }\n return textContent;\n };\n ImageEditor.prototype.initAdjustmentToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getAdjustmentToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.initFilterToolbarItem = function () {\n var _this = this;\n var mainItem = this.getFilterToolbarItem();\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: mainItem,\n clicked: this.contextualToolbarClicked.bind(this),\n created: function () {\n _this.createCanvasFilter();\n if (_this.currentFilter === '') {\n _this.currentFilter = _this.element.id + '_default';\n }\n var hdrWrapper = document.querySelector('#' + _this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n document.getElementById(_this.currentFilter + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n toolbar.refreshOverflow();\n }\n });\n toolbar.appendTo('#' + this.element.id + '_contextualToolbar');\n };\n ImageEditor.prototype.createCanvasFilter = function () {\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n }\n var noFilter = document.querySelector('#' + this.element.id + '_defaultCanvas');\n noFilter.style.width = '100px';\n noFilter.style.height = '100px';\n noFilter.style.filter = this.updateAdjustment('default', null, true);\n var ctx = noFilter.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var chrome = document.querySelector('#' + this.element.id + '_chromeCanvas');\n chrome.style.width = '100px';\n chrome.style.height = '100px';\n chrome.style.filter = this.updateAdjustment('chrome', null, true);\n ctx = chrome.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var cold = document.querySelector('#' + this.element.id + '_coldCanvas');\n cold.style.width = '100px';\n cold.style.height = '100px';\n cold.style.filter = this.updateAdjustment('cold', null, true);\n ctx = cold.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var warm = document.querySelector('#' + this.element.id + '_warmCanvas');\n warm.style.width = '100px';\n warm.style.height = '100px';\n warm.style.filter = this.updateAdjustment('warm', null, true);\n ctx = warm.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n var grayscale = document.querySelector('#' + this.element.id + '_grayscaleCanvas');\n grayscale.style.width = '100px';\n grayscale.style.height = '100px';\n grayscale.style.filter = this.updateAdjustment('grayscale', null, true);\n ctx = grayscale.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n var sepia = document.querySelector('#' + this.element.id + '_sepiaCanvas');\n sepia.style.width = '100px';\n sepia.style.height = '100px';\n sepia.style.filter = this.updateAdjustment('sepia', null, true);\n ctx = sepia.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var invert = document.querySelector('#' + this.element.id + '_invertCanvas');\n invert.style.width = '100px';\n invert.style.height = '100px';\n invert.style.filter = this.updateAdjustment('invert', null, true);\n ctx = invert.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n };\n ImageEditor.prototype.updateCanvas = function () {\n this.lastX = this.baseImg.width / 2;\n this.lastY = this.baseImg.height / 2;\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.toolbarTemplate) && !isNullOrUndefined(document.querySelector('.e-toolbar'))) {\n toolbarHeight = document.querySelector('.e-toolbar').clientHeight;\n maxDimension.width -= toolbarHeight;\n maxDimension.height -= toolbarHeight;\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n if (!isNullOrUndefined(this.toolbarTemplate)) {\n this.lowerCanvas.style.left = parseFloat(this.lowerCanvas.style.left) + (toolbarHeight / 2) + 'px';\n }\n if (canvasWrapper) {\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (parseFloat(canvasWrapper.style.height) - maxDimension.height - 1) / 2 + 'px';\n }\n this.lowerContext.filter = tempFilter;\n if (this.lowerContext.filter === 'none' || this.lowerContext.filter === 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)' ||\n this.isInitialLoading) {\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateInMemoryCanvas('updateCanvas');\n if (this.canvasFilter !== 'none') {\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n }\n if (this.isInitialLoading) {\n this.initializeFilter();\n this.isInitialLoading = false;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n else {\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('fileOpened');\n };\n ImageEditor.prototype.imageOnLoad = function (src) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n proxy.baseImg.src = proxy.baseImgSrc.id = src;\n this.baseImg.onload = function () {\n _this.lowerContext.drawImage(_this.baseImg, 0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n if (_this.togglePen) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n _this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy.element);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.togglePen = false;\n }, 'image/png');\n _this.inMemoryContext.clearRect(0, 0, _this.inMemoryCanvas.width, _this.inMemoryCanvas.height);\n var imgData = _this.lowerContext.getImageData(0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n _this.inMemoryContext.putImageData(imgData, 0, 0);\n var temp = _this.imgDataColl[0];\n _this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n _this.imgDataColl.splice(1, 1, temp);\n }\n else {\n hideSpinner(_this.element);\n _this.element.style.opacity = '1';\n _this.updateCanvas();\n }\n if (Browser.isDevice) {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n };\n };\n ImageEditor.prototype.refreshActiveObj = function () {\n this.activeObj = {};\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 };\n this.activeObj.flipObjColl = [];\n this.activeObj.strokeSettings = this.strokeSettings;\n this.activeObj.textSettings = this.textSettings;\n };\n ImageEditor.prototype.redrawText = function (ratio) {\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.italic) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n var rows = this.activeObj.keyHistory.split('\\n');\n var text = this.textBox.style.display === 'block' ? this.getMaxText(true) : this.getMaxText();\n var width = this.upperContext.measureText(text).width + this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25);\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n };\n ImageEditor.prototype.setTextSelection = function (width, height) {\n var degree = this.degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree === 0) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.endX - width,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n }\n else if (degree === 90) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - width,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n }\n else if (degree === 180) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + width),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.startY };\n }\n else {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n }\n else if (degree === 270) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + height),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n }\n if (this.activeObj.flipObjColl.length === 0) {\n if (degree === 0) {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (degree === 90) {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (degree === 180) {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n else if (degree === 270) {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.fileSelect = function (inputElement, args) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var filesData = args.target.files[0];\n if (this.imgDataColl.length > 0) {\n this.imgDataColl = [];\n this.reset();\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var URL = window.URL;\n var url = URL.createObjectURL(filesData);\n this.imageOnLoad(url.toString());\n inputElement.value = '';\n };\n ImageEditor.prototype.findTextPoint = function (e) {\n if (this.activeObj.shape === 'text') {\n this.textBox.style.transformOrigin = '0 0';\n var degree = void 0;\n var scale = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.flipObjColl.length > 0) {\n // need to add scale value according to length.\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree !== 0 && degree % 90 === 0 && degree !== 180) {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(1, -1)' :\n 'scale(-1, 1)';\n }\n else {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(-1, 1)' :\n 'scale(1, -1)';\n }\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n }\n }\n else {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)';\n }\n this.findTextTarget(e);\n }\n };\n ImageEditor.prototype.getStrokeWidth = function (text) {\n var strokeWidth;\n switch (text) {\n case '1':\n strokeWidth = this.l10n.getConstant('XSmall');\n break;\n case '2':\n strokeWidth = this.l10n.getConstant('Small');\n break;\n case '3':\n strokeWidth = this.l10n.getConstant('Medium');\n break;\n case '4':\n strokeWidth = this.l10n.getConstant('Large');\n break;\n case '5':\n strokeWidth = this.l10n.getConstant('XLarge');\n break;\n }\n return strokeWidth;\n };\n ImageEditor.prototype.updateToolbarItems = function (ratio) {\n var selFillElem = this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview');\n var selStrokeElem = this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview');\n var selTextStrokeElem = this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview');\n var selPenStrokeElem = this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview');\n var strokeWidthElem = this.element.querySelector('.e-shape-stroke-width');\n var fontFamilyElem = this.element.querySelector('.e-text-font-family');\n var fontSizeElem = this.element.querySelector('.e-text-font-size');\n var fontStyleElem = this.element.querySelector('.e-text-font-style');\n if (selFillElem) {\n if (this.activeObj.strokeSettings.fillColor === '') {\n selFillElem.classList.add('e-nocolor-item');\n }\n else {\n selFillElem.classList.remove('e-nocolor-item');\n selFillElem.style.background = this.activeObj.strokeSettings.fillColor;\n }\n getComponent(this.element.id + '_shape_fill', 'colorpicker').value\n = this.activeObj.strokeSettings.fillColor + 'ff';\n }\n if (selStrokeElem) {\n selStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_shape_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selTextStrokeElem) {\n selTextStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_text_font', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selPenStrokeElem) {\n selPenStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_pen_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (fontFamilyElem) {\n if (Browser.isDevice) {\n fontFamilyElem.setAttribute('style', 'font-family:' + this.activeObj.textSettings.fontFamily.toLowerCase());\n }\n else {\n fontFamilyElem.textContent = this.activeObj.textSettings.fontFamily;\n }\n }\n if (fontSizeElem) {\n for (var i = 0; i < this.fontSizeColl.length; i++) {\n if (parseInt(this.fontSizeColl[i].text, 10) >= this.activeObj.textSettings.fontSize) {\n fontSizeElem.textContent = (i + 1).toString();\n break;\n }\n }\n }\n if (fontStyleElem) {\n if (Browser.isDevice) {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', '');\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.setAttribute('style', 'font-weight: bold');\n }\n else {\n fontStyleElem.setAttribute('style', 'font-style: italic');\n }\n }\n else {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Default';\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Bold Italic';\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.textContent = 'Bold';\n }\n else {\n fontStyleElem.textContent = 'Italic';\n }\n }\n }\n if (strokeWidthElem) {\n var strokeWidth = Math.round((this.activeObj.strokeSettings.strokeWidth /\n (ratio.width + ratio.height)) * this.factor).toString();\n strokeWidthElem.textContent = this.getStrokeWidth(strokeWidth);\n }\n };\n ImageEditor.prototype.setTimer = function (e) {\n if (!this.isTimer && this.timer > 10) {\n this.findTextPoint(e);\n if (Browser.isDevice) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.targetTouches = function (touches) {\n var p1 = { x: touches[0].pageX, y: touches[0].pageY };\n var p2 = { x: touches[1].pageX, y: touches[1].pageY };\n var points = [p1, p2];\n return points;\n };\n ImageEditor.prototype.calculateScale = function (startTouches, endTouches) {\n var startDistance = this.getDistance(startTouches[0], startTouches[1]);\n var endDistance = this.getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n };\n ImageEditor.prototype.getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return Math.sqrt(x * x + y * y);\n };\n ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n if (e.touches.length === 2) {\n this.isFirstMove = true;\n }\n else {\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\n }\n EventHandler.add(this.lowerCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n EventHandler.add(this.upperCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n };\n ImageEditor.prototype.mouseDownEventHandler = function (e) {\n if (e.type === 'touchstart' && e.currentTarget === this.lowerCanvas && this.imgDataColl.length === 0) {\n return;\n }\n var ratio = this.calcRatio();\n if (this.dragCanvas) {\n this.canvasMouseDownHandler(e);\n }\n else {\n e.preventDefault();\n var x = void 0;\n var y = void 0;\n if (e.type === 'mousedown') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.redrawActObj(x, y);\n if ((!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n !this.element.querySelector('#' + this.element.id + '_contextualToolbar').parentElement.classList.contains('e-hide')) ||\n (!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_headWrapper'))\n && !this.element.querySelector('#' + this.element.id + '_headWrapper').parentElement.classList.contains('e-hide'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.okBtn();\n this.refreshToolbar('main');\n }\n if (this.upperCanvas.style.cursor === 'crosshair' || (Browser.isDevice && this.togglePen)) {\n if (this.togglePen) {\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.penStrokeWidth)) {\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n }\n if (this.activeObj.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4 &&\n this.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4) {\n this.activeObj.strokeSettings.strokeWidth = this.strokeSettings.strokeWidth =\n 2 * ((ratio.width + ratio.height) / this.factor);\n }\n this.minStrokeWidth = this.maxStrokeWidth = this.penStrokeWidth;\n this.velocity = 0.7;\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n this.mouseDownHandler(e, this.upperCanvas, this.pannStart, this.factor); // To call signature base\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.currObjType.isActiveObj = false;\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n }\n if ((this.upperCanvas.style.cursor !== 'crosshair' && e.type.toLowerCase() === 'touchstart') ||\n (this.currObjType.isActiveObj && this.upperCanvas.style.cursor !== 'default' && !this.togglePen)) {\n this.findTarget(x, y, e.type);\n }\n else if ((this.currObjType.shape === '' || this.currObjType.isCustomCrop) && !this.togglePen && this.upperCanvas.style.cursor !== 'default') {\n this.setActivePoint(x, y);\n }\n if (!isNullOrUndefined(this.activeObj)) {\n var isCropSelection = false;\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && (this.currObjType.isCustomCrop || this.togglePen)) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if ((this.activeObj.shape === 'rectangle') || (this.activeObj.shape === 'ellipse')\n || (this.activeObj.shape === 'line')) {\n this.refreshToolbar('shapes');\n }\n else if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (!isCropSelection) {\n this.callMainToolbar();\n }\n this.updateToolbarItems(ratio);\n }\n }\n };\n ImageEditor.prototype.mouseMoveEventHandler = function (e) {\n e.preventDefault();\n if (e.type === 'touchmove' && e.touches.length === 2) {\n if (this.isFirstMove) {\n this.startTouches = this.targetTouches(e.touches);\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n else {\n var ratio = this.calcRatio();\n var firstFingerX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n var firstFingerY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n var secondFingerX = e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft);\n var secondFingerY = e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop);\n this.lastX = firstFingerX > secondFingerX ? secondFingerX + (firstFingerX - secondFingerX) : firstFingerX +\n (secondFingerX - firstFingerX);\n this.lastY = firstFingerY > secondFingerY ? secondFingerY + (firstFingerY - secondFingerY) : firstFingerY +\n (secondFingerY - firstFingerY);\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n var scale = this.calculateScale(this.startTouches, this.targetTouches(e.touches));\n // Need to set lastX and lastY points\n if (this.tempTouches[0].x !== firstFingerX && this.tempTouches[0].y !== firstFingerY &&\n this.tempTouches[1].x !== secondFingerX && this.tempTouches[1].y !== secondFingerY) {\n if (scale > 1) {\n this.zoom(1.1);\n }\n else {\n this.zoom(-1.1);\n }\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n }\n this.isFirstMove = false;\n return;\n }\n if (this.textBox.style.display === 'none') {\n this.isTimer = true;\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.canvasMouseMoveHandler(e);\n if (this.currObjType.isActiveObj && (this.activeObj.activePoint !== undefined || this.objColl.length > 0) &&\n !this.dragCanvas || this.activeObj.activePoint !== undefined) {\n if (this.dragElement === '') {\n this.setCursor(x, y);\n if (this.activeObj.activePoint.width === 0 && this.upperCanvas.style.cursor !== 'default' &&\n this.upperCanvas.style.cursor !== 'move' && this.upperCanvas.style.cursor !== 'crosshair'\n && this.upperCanvas.style.cursor !== 'grab') {\n this.upperCanvas.style.cursor = 'move';\n }\n this.findTarget(x, y, e.type);\n }\n }\n if (this.currObjType.isDragging) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var initialDraw = this.updateActivePoint(x, y);\n this.drawObject('duplicate', null, initialDraw);\n }\n };\n ImageEditor.prototype.mouseUpEventHandler = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mouseup') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n x = this.touchEndPoint.x;\n y = this.touchEndPoint.y;\n }\n if (e.type === 'touchend') {\n this.startTouches = this.tempTouches = [];\n this.isFirstMove = false;\n if (this.textBox.style.display === 'none') {\n this.isTimer = false;\n this.timer = 0;\n }\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (e.currentTarget === this.upperCanvas) {\n this.currObjType.shape = this.currObjType.shape.toLowerCase();\n if (!this.togglePen && !this.dragCanvas) {\n if (!isNullOrUndefined(this.tempObjColl) && this.activeObj.activePoint.width !== 0) {\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.tempObjColl = undefined;\n }\n this.applyCurrActObj(x, y);\n }\n else if (this.dragCanvas) {\n this.setPanPoints();\n }\n }\n if (this.togglePen && e.currentTarget === this.upperCanvas) {\n this.penDrawColl.push({ strokeWidth: this.penStrokeWidth, strokeColor: this.activeObj.strokeSettings.strokeColor, points: this.imageEditorPointsColl });\n this.imageEditorPointsColl = [];\n }\n else {\n this.currObjType.shape = '';\n }\n this.dragElement = '';\n this.currObjType.isInitialLine = this.currObjType.isDragging = false;\n this.oldPoint.x = undefined;\n this.oldPoint.y = undefined;\n };\n ImageEditor.prototype.keyDownEventHandler = function (e) {\n var _this = this;\n var shapeChangingArgs = {};\n var beforeSave = { fileName: 'ImageEditor', fileType: 'Png', cancel: false };\n switch (e.key) {\n case (e.ctrlKey && 's'):\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!beforeSave.cancel) {\n _this.export(observableSaveArgs.fileType, observableSaveArgs.fileName);\n }\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case 'Delete':\n if (this.textBox.style.display === 'none') {\n shapeChangingArgs = { action: 'delete', previousShapeSettings: this.activeObj, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\n }\n break;\n case 'Escape':\n if (this.togglePan) {\n this.refreshToolbar(this.currentToolbar);\n this.pan(false);\n }\n else {\n this.cancelItems();\n }\n break;\n case 'Enter':\n this.crop();\n break;\n default:\n if (Browser.isDevice && this.textBox.style.display === 'block') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n break;\n }\n };\n ImageEditor.prototype.keyUpEventHandler = function (e) {\n // eslint-disable-next-line\n if (this.textBox.style.display === 'block' && e.target.id === this.element.id + '_textBox') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n };\n ImageEditor.prototype.canvasMouseDownHandler = function (e) {\n e.preventDefault();\n var ratio = this.calcRatio();\n if (e.type === 'mousedown') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.canvasMouseMoveHandler = function (e) {\n if (this.dragCanvas && this.factor > 1) {\n this.lowerCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n var ratio = this.calcRatio();\n if (e.type === 'mousemove') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragStart && this.dragCanvas) {\n this.drawPanImg();\n }\n };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n if (this.togglePan && e.currentTarget === this.lowerCanvas) {\n var ratio = this.calcRatio();\n if (e.type === 'mouseup') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n this.setPanPoints();\n }\n this.dragStart = null;\n // zooms on mouse click point\n // if (e.currentTarget !== document) {\n // this.zoom(e.shiftKey ? -1 : 1 );\n // }\n this.currObjType.isDragging = false;\n };\n ImageEditor.prototype.setPanPoints = function () {\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.textKeyDown = function (e) {\n if (String.fromCharCode(e.which) === '\\r') {\n this.textRow += 1;\n }\n this.textBox.setAttribute('rows', this.textRow.toString());\n this.textBox.style.height = 'auto';\n this.textBox.style.height = this.textBox.scrollHeight + 'px';\n this.setTextBoxWidth(e);\n if (Browser.isDevice) {\n this.textBox.style.width = parseFloat(this.textBox.style.width) + this.textBox.style.fontSize + 'px';\n }\n var rows = this.textBox.value.split('\\n');\n this.textRow = rows.length;\n this.textBox.setAttribute('rows', this.textRow.toString());\n };\n ImageEditor.prototype.adjustToScreen = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var tempFilter = this.lowerContext.filter;\n this.okBtn();\n this.applyActObj();\n this.refreshActiveObj();\n if (this.imgDataColl.length > 0) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n canvasWrapper.style.height = this.element.offsetHeight + 'px';\n if (Browser.isDevice) {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - (2 * this.toolbarHeight)) - 3 + 'px';\n }\n else {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - this.toolbarHeight) - 3 + 'px';\n }\n }\n this.redrawImg(tempFilter);\n if (!this.currObjType.isSave) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n proxy.lowerContext.filter = proxy.initialAdjustmentValue = proxy.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy.cssClass) {\n addClass([proxy.element], proxy.cssClass.split(' '));\n }\n proxy.lowerContext.clearRect(0, 0, proxy.lowerCanvas.width, proxy.lowerCanvas.height);\n proxy.lowerContext.drawImage(proxy.inMemoryCanvas, 0, 0);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.lowerContext.filter = tempFilter;\n }, 'image/png');\n }\n else {\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n }\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_10 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_10.refreshOverflow();\n if (!isNullOrUndefined(this.element.querySelector('.e-contextual-toolbar-wrapper'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n }\n };\n ImageEditor.prototype.screenOrientation = function () {\n if (Browser.isDevice) {\n this.isScreenOriented = true;\n setTimeout(this.adjustToScreen.bind(this), 100);\n }\n };\n ImageEditor.prototype.windowResizeHandler = function () {\n if (!Browser.isDevice) {\n this.adjustToScreen();\n }\n };\n ImageEditor.prototype.drawPanImg = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var transitionArgs = { startPoint: { x: this.dragStart.x, y: this.dragStart.y },\n endPoint: { x: pt.x, y: pt.y } };\n this.trigger('panning', transitionArgs);\n var xDiff = pt.x - this.dragStart.x;\n var yDiff = pt.y - this.dragStart.y;\n var xxDiff = xDiff;\n var yyDiff = yDiff;\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n if (xDiff >= 0) {\n if (pt1.x < 1) {\n xDiff = 0;\n }\n }\n else {\n if (pt2.x > this.lowerCanvas.width) {\n xDiff = 0;\n }\n }\n if (yDiff >= 0) {\n if (pt1.y < 1) {\n yDiff = 0;\n }\n }\n else {\n if (pt2.y > this.lowerCanvas.height) {\n yDiff = 0;\n }\n }\n this.lowerContext.translate(-xxDiff, -yyDiff);\n this.upperContext.translate(-xxDiff, -yyDiff);\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n this.redraw();\n };\n ImageEditor.prototype.redrawImg = function (tempFilter) {\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.offsetHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.updateContext = function (ctx) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var xform = new DOMMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n ctx.getTransform = function () {\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var savedTransforms = [];\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var save = ctx.save;\n ctx.save = function () {\n savedTransforms.push(xform.translate(0, 0));\n return save.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var restore = ctx.restore;\n ctx.restore = function () {\n xform = savedTransforms.pop();\n return restore.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var scale = ctx.scale;\n ctx.scale = function (sx, sy) {\n xform = _this.scaleNonUniform(xform, sx, sy);\n proxy.factor = xform.a;\n return scale.call(ctx, sx, sy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var rotate = ctx.rotate;\n ctx.rotate = function (radians) {\n xform = xform.rotate(radians * 180 / Math.PI);\n return rotate.call(ctx, radians);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var translate = ctx.translate;\n ctx.translate = function (dx, dy) {\n xform = xform.translate(dx, dy);\n return translate.call(ctx, dx, dy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var transform = ctx.transform;\n ctx.transform = function (a, b, c, d, e, f) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var m2 = new DOMMatrix();\n m2.a = a;\n m2.b = b;\n m2.c = c;\n m2.d = d;\n m2.e = e;\n m2.f = f;\n xform = xform.multiply(m2);\n return transform.call(ctx, a, b, c, d, e, f);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var setTransform = ctx.setTransform;\n ctx.setTransform = function (a, b, c, d, e, f) {\n xform.a = a;\n xform.b = b;\n xform.c = c;\n xform.d = d;\n xform.e = e;\n xform.f = f;\n return setTransform.call(ctx, a, b, c, d, e, f);\n };\n var pt = new DOMPoint();\n ctx.transformedPoint = function (x, y) {\n pt.x = x;\n pt.y = y;\n return pt.matrixTransform(xform.inverse());\n };\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.scaleNonUniform = function (xform, sx, sy) {\n xform.m11 *= sx;\n xform.m12 *= sx;\n xform.m13 *= sx;\n xform.m14 *= sx;\n xform.m21 *= sy;\n xform.m22 *= sy;\n xform.m23 *= sy;\n xform.m24 *= sy;\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.zoomImg = function (clicks) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var scaleFactor = 1.1;\n var transitionArgs = { zoomPoint: { x: pt.x, y: pt.y }, zoomLevel: clicks };\n this.trigger('zooming', transitionArgs);\n this.lowerContext.translate(pt.x, pt.y);\n this.upperContext.translate(pt.x, pt.y);\n var factor = Math.pow(scaleFactor, clicks);\n this.factor += (factor - 1);\n this.lowerContext.scale(factor, factor);\n this.upperContext.scale(factor, factor);\n this.lowerContext.translate(-pt.x, -pt.y);\n this.upperContext.translate(-pt.x, -pt.y);\n var ratio = this.calcRatio();\n if (!isNullOrUndefined(this.strokeSettings.strokeWidth)) {\n this.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (this.factor > 0.99 && this.factor < 1.01) {\n this.factor = 1;\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n else {\n if (this.factor > 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n var xDiff = pt.x;\n var yDiff = pt.y;\n if (pt1.x < 1) {\n xDiff = -xDiff;\n }\n else if (pt2.x > this.lowerCanvas.width) {\n xDiff = pt2.x - this.lowerCanvas.width;\n }\n if (pt1.y < 1) {\n yDiff = -yDiff;\n }\n else if (pt2.y > this.lowerCanvas.height) {\n yDiff = pt2.y - this.lowerCanvas.height;\n }\n if (xDiff !== pt.x || yDiff !== pt.y) {\n if (xDiff === pt.x) {\n xDiff = 0;\n }\n if (yDiff === pt.y) {\n yDiff = 0;\n }\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n }\n }\n this.redraw();\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.handleScroll = function (e) {\n var delta = e.wheelDelta ? e.wheelDelta / 40 : e.detail ? -e.detail : 0;\n if (delta) {\n this.zoom(delta);\n }\n return e.preventDefault() && false;\n };\n ImageEditor.prototype.redraw = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n this.pannStart.startX = p1.x;\n this.pannStart.startY = p1.y;\n this.pannEnd.startX = this.lowerCanvas.width - p2.x;\n this.pannEnd.startY = this.lowerCanvas.height - p2.y;\n this.lowerContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.upperContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.lowerContext.save();\n this.upperContext.save();\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.restore();\n this.upperContext.restore();\n this.redrawImgWithObj();\n };\n ImageEditor.prototype.applyCurrActObj = function (x, y) {\n var isInside = false;\n var ratio = this.calcRatio();\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (isNullOrUndefined(actObj.activePoint)) {\n return;\n }\n if ((x >= Math.floor(actObj.activePoint.startX) && x <= Math.ceil(actObj.activePoint.endX) &&\n y >= Math.floor(actObj.activePoint.startY) && y <= Math.ceil(actObj.activePoint.endY)) ||\n (actObj.shape === 'text')) {\n isInside = true;\n }\n if (!isInside) {\n if (this.activeObj.horTopLine !== undefined && this.activeObj.horTopLine.startX !== 0 && this.activeObj.horTopLine.endX !== 0\n && !this.currObjType.isCustomCrop && this.currObjType.shape !== '') {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n if (this.activeObj.shape === 'text' || (this.currObjType.shape === 'ellipse' || this.currObjType.shape === 'rectangle' ||\n this.currObjType.shape === 'line')) {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\n this.lowerContext.filter = tempFilter;\n this.apply('shape');\n }\n }\n };\n ImageEditor.prototype.updateTextFromTextArea = function (ratio) {\n this.activeObj.keyHistory = this.textBox.value;\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var rows = this.activeObj.keyHistory.split('\\n');\n if (rows.length > 1) {\n height *= rows.length;\n var widthColl = [];\n for (var i = 0; i < rows.length; i++) {\n widthColl.push(this.upperContext.measureText(rows[i]).width +\n this.activeObj.textSettings.fontSize * 0.5);\n }\n width = Math.max.apply(Math, widthColl);\n }\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n };\n ImageEditor.prototype.setTextBoxStylesToActObj = function () {\n var ratio = this.calcRatio();\n this.activeObj.textSettings.fontFamily = this.textBox.style.fontFamily;\n this.activeObj.strokeSettings.strokeColor = this.textBox.style.color;\n if (this.textBox.style.fontWeight === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else {\n this.activeObj.textSettings.bold = false;\n }\n if (this.textBox.style.fontStyle === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n }\n this.activeObj.textSettings.fontSize = (parseFloat(this.textBox.style.fontSize) * ((ratio.width + ratio.height) / 2)) / this.factor;\n };\n ImageEditor.prototype.redrawActObj = function (x, y) {\n var ratio = this.calcRatio();\n var splitWords;\n var bbox = this.upperCanvas.getBoundingClientRect();\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n if (this.textBox.style.display === 'block') {\n this.setTextBoxStylesToActObj();\n if (x && y) {\n x -= bbox.left;\n y -= bbox.top;\n if ((x !== this.activeObj.activePoint.startX / ratio.width) && (y !== this.activeObj.activePoint.startY /\n ratio.height)) {\n this.updateTextFromTextArea(ratio);\n this.applyActObj();\n }\n }\n else {\n this.updateTextFromTextArea(ratio);\n this.apply(this.activeObj.shape, this.activeObj);\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n this.textBox.style.transform = '';\n this.refreshToolbar('main');\n }\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxPos = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.setTextBoxPoints = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left +\n actObj.activePoint.width / ratio.width);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 90) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 180) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left)\n + actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 270) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.findTextTarget = function (e) {\n var x;\n var y;\n if (e.type === 'dblclick') {\n x = e.clientX;\n y = e.clientY;\n }\n else if (e.type === 'touchstart') {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n var degree;\n var flip = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n var temp;\n if (this.textBox.style.display === 'block') {\n x -= bbox.left;\n y -= bbox.top;\n }\n else {\n temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n }\n }\n this.lowerContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n this.activeObj = temp;\n this.updateFontStyles();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (actObj.flipObjColl.length === 4) {\n actObj.flipObjColl = [];\n flip = '';\n }\n if (flip === '' && actObj.flipObjColl.length > 1) {\n flip = actObj.flipObjColl[actObj.flipObjColl.length - 1];\n }\n if (actObj.flipObjColl.length <= 1) {\n var points = this.setTextBoxPos(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n else {\n var points = this.setTextBoxPoints(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n this.textBox.style.display = 'block';\n this.textBox.style.left = x + 'px';\n this.textBox.style.top = y + 'px';\n this.textBox.style.fontFamily = actObj.textSettings.fontFamily;\n this.textBox.style.fontSize = actObj.textSettings.fontSize / ((ratio.width + ratio.height) / 2) * this.factor + 'px';\n this.textBox.style.color = actObj.strokeSettings.strokeColor;\n this.textBox.style.fontWeight = actObj.textSettings.bold ? 'bold' : 'normal';\n this.textBox.style.fontStyle = actObj.textSettings.italic ? 'italic' : 'normal';\n this.textBox.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textBox.value = actObj.keyHistory;\n this.textBox.style.overflow = 'hidden';\n this.textBox.style.height = 'auto';\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.height / ratio.height) + 'px';\n this.textBox.style.height = (actObj.activePoint.width / ratio.width) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.height + 'px';\n this.textBox.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.width / ratio.width) + 'px';\n this.textBox.style.height = (actObj.activePoint.height / ratio.height) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.width + 'px';\n this.textBox.style.height = actObj.activePoint.height + 'px';\n }\n }\n this.setTextBoxWidth();\n this.setTextBoxHeight();\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxHeight = function () {\n var ratio = this.calcRatio();\n var textBoxTop;\n var degree;\n var flip = '';\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if (degree === 0) {\n if (flip.toLowerCase() === 'vertical') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.lowerCanvas.style.maxHeight)\n - parseFloat(this.textBox.style.top))) + 'px';\n }\n else {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top)) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n else {\n this.textBox.style.maxHeight = parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n this.textBox.style.maxHeight = ((parseFloat(this.textBox.style.maxHeight) - parseFloat(this.textBox.style.fontSize) * 0.5)) + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var ratio = this.calcRatio();\n var text = this.getMaxText(true);\n if (this.textBox.style.display === 'block') {\n this.updateFontStyles(true);\n }\n else {\n this.updateFontStyles();\n }\n var textBoxWidth = (this.upperContext.measureText(text).width + (parseFloat(this.textBox.style.fontSize) / 2));\n var letterWidth = e ? this.upperContext.measureText(String.fromCharCode(e.which)).width : 0;\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n var degree;\n var flip = '';\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if ((!isNullOrUndefined(e) && parseFloat(this.textBox.style.width) < (textBoxWidth + letterWidth)) || isNullOrUndefined(e)) {\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n }\n };\n ImageEditor.prototype.setActivePoint = function (startX, startY) {\n if (isNullOrUndefined(this.activeObj.activePoint)) {\n return;\n }\n if (this.currObjType.isText) {\n var textWidth = startX ? startX : 0;\n var textHeight = startY ? startY : this.activeObj.textSettings.fontSize;\n if (this.activeObj.textSettings.fontSize === undefined) {\n this.activeObj.textSettings.fontSize = (Math.abs(this.baseImg.width - this.baseImg.height)) * 0.1;\n }\n this.setTextSelection(textWidth, textHeight);\n this.mouseDownPoint.x = this.activeObj.activePoint.endX;\n this.mouseDownPoint.y = this.activeObj.activePoint.endY;\n if (this.activeObj.horTopLine !== undefined) {\n this.activeObj.activePoint = extend({}, this.activeObj.activePoint, {}, true);\n }\n this.drawObject('duplicate');\n }\n else if (startX && startY) {\n this.activeObj.activePoint.startX = this.mouseDownPoint.x = startX;\n this.activeObj.activePoint.startY = this.mouseDownPoint.y = startY;\n this.currObjType.isDragging = true;\n }\n else {\n var selectInfo = this.activeObj;\n this.activeObj.activePoint = { startX: selectInfo.horTopLine.startX, startY: selectInfo.horTopLine.startY,\n endX: selectInfo.horTopLine.endX, endY: selectInfo.horTopLine.endY };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateActivePoint = function (x, y) {\n var initialDraw = false;\n var bbox = this.lowerCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.dragElement !== '') {\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = ((x - bbox.left) * ratio.width) / this.factor + this.pannStart.startX;\n y = ((y - bbox.top) * ratio.height) / this.factor + this.pannStart.startY;\n }\n }\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n var shapeResizingArgs = { action: 'resize', previousShapeSettings: this.activeObj };\n var shapeMovingArgs = { action: 'move', previousShapeSettings: this.activeObj };\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.updateNWPoints(x, y, maxDimension);\n break;\n case 'n-resize':\n this.updateNPoints(x, y);\n break;\n case 'ne-resize':\n this.updateNEPoints(x, y, maxDimension);\n break;\n case 'w-resize':\n this.updateWPoints(x, y);\n break;\n case 'e-resize':\n this.updateEPoints(x, y);\n break;\n case 'sw-resize':\n this.updateSWPoints(x, y, maxDimension);\n break;\n case 's-resize':\n this.updateSPoints(x, y);\n break;\n case 'se-resize':\n this.updateSEPoints(x, y, maxDimension);\n break;\n default:\n if (this.dragPoint.startX) {\n var width = (this.dragPoint.endX - this.previousPoint.x);\n var height = (this.dragPoint.endY - this.previousPoint.y);\n if (this.factor !== 1) {\n width = (width * ratio.width) / this.factor;\n height = (height * ratio.height) / this.factor;\n }\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.activeObj.shape !== 'text' && !this.allowDrag) {\n if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x) && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n if (this.activeObj.activePoint.startX >= this.pannStart.startX && this.activeObj.activePoint.startY >=\n this.pannStart.startY && this.activeObj.activePoint.endX <= endPoint.x && this.activeObj.activePoint.endY\n <= endPoint.y) {\n this.allowDrag = false;\n }\n }\n else {\n this.activeObj.activePoint.startX = x < this.mouseDownPoint.x ? x : this.mouseDownPoint.x;\n this.activeObj.activePoint.startY = y < this.mouseDownPoint.y ? y : this.mouseDownPoint.y;\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) * ratio.width;\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) + ((this.pannStart.startX)\n / ratio.width * this.factor);\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) + ((this.pannStart.startY)\n / ratio.height * this.factor);\n initialDraw = true;\n }\n x = x < this.mouseDownPoint.x ? this.mouseDownPoint.x : x;\n y = y < this.mouseDownPoint.y ? this.mouseDownPoint.y : y;\n if (this.factor === 1) {\n this.activeObj.activePoint.endX = (x - bbox.left) * ratio.width;\n this.activeObj.activePoint.endY = (y - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.endX = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n this.activeObj.activePoint.endY = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n initialDraw = true;\n }\n }\n break;\n }\n shapeResizingArgs.currentShapeSettings = this.activeObj;\n shapeMovingArgs.currentShapeSettings = this.activeObj;\n this.trigger('shapeChanging', shapeMovingArgs);\n this.trigger('shapeChanging', shapeResizingArgs);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n return initialDraw;\n };\n ImageEditor.prototype.updateNWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'ne-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'sw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.startY < y) {\n width = x - this.activeObj.activePoint.startX;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateNPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 's-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateNEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'nw-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'se-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateWPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'e-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateEPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'w-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'se-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'nw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateSPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'n-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.x;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x >= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 50) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 50) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'sw-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'ne-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.getScaleRatio = function (scale) {\n var point = { x: scale, y: scale };\n if (!this.currObjType.isCustomCrop && this.activeObj.shape !== 'crop-circle' && this.activeObj.shape !== 'crop-square') {\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = scale / (parseInt(ratio[1], 10));\n point.x = newScale * (parseInt(ratio[0], 10));\n point.y = newScale * (parseInt(ratio[1], 10));\n }\n return point;\n };\n ImageEditor.prototype.getMaxText = function (isTextBox) {\n var text = isTextBox ? this.textBox.value : this.activeObj.keyHistory;\n var maxi;\n var rows = text.split('\\n');\n var maxStr = rows[0].length;\n var maxText = rows[0];\n for (var i = 1; i < rows.length; i++) {\n maxi = rows[i].length;\n if (maxi > maxStr) {\n maxText = rows[i];\n maxStr = maxi;\n }\n }\n return maxText;\n };\n ImageEditor.prototype.setDragLimit = function () {\n if (this.factor === 1 && this.activeObj.activePoint !== undefined && this.activeObj.shape !== 'text') {\n if (this.activeObj.activePoint.startX < 0) {\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.width;\n }\n else if (this.activeObj.activePoint.endX > this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.width;\n }\n if (this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.height;\n }\n else if (this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.height;\n }\n }\n };\n ImageEditor.prototype.lineDraw = function (ratio) {\n if (this.activeObj.activePoint.height < 10 * ratio.height) {\n this.activeObj.activePoint.startY -= 10 * ratio.height;\n this.activeObj.activePoint.endY += 10 * ratio.height;\n this.activeObj.lineDraw = 'horizontal';\n }\n else if (this.activeObj.activePoint.width < 10 * ratio.width) {\n this.activeObj.activePoint.startX -= 10 * ratio.width;\n this.activeObj.activePoint.endX += 10 * ratio.width;\n this.activeObj.lineDraw = 'vertical';\n }\n else if (this.currObjType.isInitialLine) {\n this.activeObj.lineDraw = 'normal';\n this.currObjType.isInitialLine = false;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {\n var ratio = this.calcRatio();\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.5)';\n canvasDraw.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (2 * (ratio.width + ratio.height)) / this.factor;\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.horTopLine.startX + (selectionWidth / 2), this.activeObj.horTopLine.startY\n + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n canvasDraw.stroke();\n canvasDraw.closePath();\n canvasDraw.save();\n canvasDraw.beginPath();\n canvasDraw.arc(((this.activeObj.activePoint.endX - this.activeObj.activePoint.startX) / 2) + this.activeObj.activePoint.startX, ((this.activeObj.activePoint.endY - this.activeObj.activePoint.startY) / 2) + this.activeObj.activePoint.startY, (this.activeObj.activePoint.width / 2), 0, Math.PI * 2);\n canvasDraw.closePath();\n canvasDraw.clip();\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.restore();\n canvasDraw.lineWidth = tempWidth;\n this.drawOuterSelection(canvasDraw, null, true);\n this.currObjType.shape = '';\n };\n ImageEditor.prototype.drawOuterSelection = function (canvasDraw, isInitialDraw, isCropCircle) {\n var splitWords;\n var ratio = this.calcRatio();\n canvasDraw.lineWidth = (0.5 * (ratio.width + ratio.height)) / this.factor;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n var tempObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n if (isInitialDraw) {\n tempObj = this.getZoomShape(tempObj, ratio);\n }\n }\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (((splitWords !== undefined && splitWords[0] === 'crop') || this.activeObj.shape === undefined) && !isCropCircle) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n if (this.activeObj.shape !== 'rectangle') {\n canvasDraw.beginPath();\n canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);\n canvasDraw.stroke();\n canvasDraw.closePath();\n }\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);\n canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);\n canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);\n canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);\n canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n if ((splitWords === undefined || splitWords[0] !== 'crop') && this.activeObj.shape !== 'text') {\n this.drawCenterCircles(canvasDraw);\n }\n this.activeObj = extend({}, tempObj, {}, true);\n };\n ImageEditor.prototype.getZoomShape = function (tempObj, ratio) {\n var obj = extend({}, tempObj, {}, true);\n obj.activePoint.startX = (obj.activePoint.startX / this.factor) * ratio.width;\n obj.activePoint.startY = (obj.activePoint.startY / this.factor) * ratio.height;\n obj.activePoint.endX = (obj.activePoint.endX / this.factor) * ratio.width;\n obj.activePoint.endY = (obj.activePoint.endY / this.factor) * ratio.height;\n obj.activePoint.width = obj.activePoint.endX - obj.activePoint.startX;\n obj.activePoint.height = obj.activePoint.endY - obj.activePoint.startY;\n this.updateActiveObject(ratio, obj.activePoint, obj);\n return obj;\n };\n ImageEditor.prototype.drawObject = function (canvas, obj, isInitialDraw, isCropRatio, points) {\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n this.setDragLimit();\n var ratio = this.calcRatio();\n if (this.currObjType.isLine && canvas !== 'original' && !obj) {\n this.lineDraw(ratio);\n }\n var splitWords = this.currObjType.shape.split('-');\n if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {\n this.drawCropRatio();\n }\n if (points) {\n this.activeObj.activePoint.startX = points.startX;\n this.activeObj.activePoint.startY = points.startY;\n this.activeObj.activePoint.endX = points.endX;\n this.activeObj.activePoint.endY = points.endY;\n this.activeObj.activePoint.width = points.width;\n this.activeObj.activePoint.height = points.height;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (obj) {\n this.activeObj = extend({}, obj, {}, true);\n if (this.factor !== 1) {\n this.updateActiveObject(ratio);\n }\n }\n else {\n this.updateActiveObject(ratio);\n }\n if (this.currObjType.isText) {\n this.activeObj.keyHistory = this.keyHistory;\n }\n if (canvas.toLowerCase() !== 'original') {\n var splitWords_1;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords_1 = this.activeObj.shape.split('-');\n if (splitWords_1[0] === 'crop') {\n isCrop = true;\n }\n }\n if (isCrop) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX + ratio.width, this.activeObj.activePoint.startY + ratio.height, this.activeObj.activePoint.width - ratio.width, this.activeObj.activePoint.height - ratio.height);\n }\n this.drawOuterSelection(canvasDraw, isInitialDraw);\n }\n this.currObjType.isActiveObj = true;\n if (obj) {\n this.drawShapeObj(canvas, obj.shape);\n }\n else if (this.keyHistory !== '' && this.currObjType.isText) {\n this.drawShapeObj(canvas, 'text');\n }\n else if (this.activeObj.shape) {\n this.drawShapeObj(canvas, this.activeObj.shape);\n }\n else {\n this.drawShapeObj(canvas, undefined);\n }\n };\n ImageEditor.prototype.updateActiveObject = function (ratio, actPoint, obj, isMouseMove) {\n actPoint = actPoint ? actPoint : extend({}, this.activeObj.activePoint, {}, true);\n obj = obj ? obj : extend({}, this.activeObj, {}, true);\n var horCircleWidth = actPoint.width / 2;\n var verCircleHeight = actPoint.height / 2;\n var radius = 7.5;\n obj.horTopLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.horBottomLine = { startX: actPoint.startX, startY: actPoint.endY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.verLeftLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.startX, endY: actPoint.endY };\n obj.verRightLine = { startX: actPoint.endX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.activePoint = actPoint;\n if (isNullOrUndefined(isMouseMove)) {\n this.activeObj = extend({}, obj, {}, true);\n }\n };\n ImageEditor.prototype.drawShapeObj = function (canvas, shape) {\n var currentShape = shape !== undefined ? shape : this.currObjType.shape;\n this.currObjType.shape = currentShape;\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n if (this.currObjType.shape.toLowerCase() === 'rectangle' || this.currObjType.shape.toLowerCase() === 'ellipse'\n || this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.shape = this.currObjType.shape;\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n if (shape === 'text' || shape === 'freehanddraw') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n }\n else {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n }\n var horLineWidth = this.activeObj.activePoint.width / 3;\n var verLineHeight = this.activeObj.activePoint.height / 3;\n var selectionWidth = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n var selectionHeight = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'rectangle':\n this.drawSquareLines(canvasDraw);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'ellipse':\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), (selectionWidth / 2) - (this.activeObj.strokeSettings.strokeWidth), (selectionHeight / 2) - (this.activeObj.strokeSettings.strokeWidth), 0, 0, 2 * Math.PI, false);\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'crop-circle':\n this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);\n break;\n case 'line':\n this.shapeLine(canvasDraw, selectionWidth, selectionHeight);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'text':\n this.shapeText(canvasDraw);\n break;\n case 'crop-square':\n case 'crop-3:4':\n case 'crop-4:3':\n case 'crop-6:9':\n case 'crop-9:6':\n case 'crop-9:16':\n case 'crop-16:9':\n this.drawSelection(horLineWidth, verLineHeight);\n this.currObjType.shape = '';\n break;\n default:\n this.drawSelection(horLineWidth, verLineHeight);\n break;\n }\n };\n ImageEditor.prototype.shapeLine = function (canvasDraw, selectionWidth, selectionHeight) {\n var startX;\n var startY;\n var endX;\n var endY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree % 180 === 0) {\n startX = this.activeObj.activePoint.startX;\n startY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n endX = this.activeObj.activePoint.endX;\n endY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n }\n else {\n startX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n startY = this.activeObj.activePoint.startY;\n endX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n endY = this.activeObj.activePoint.endY;\n }\n var tempLineWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (this.activeObj.strokeSettings.strokeWidth) / Math.abs(this.factor);\n canvasDraw.beginPath();\n switch (this.activeObj.lineDraw.toLowerCase()) {\n case 'horizontal':\n case 'vertical':\n canvasDraw.moveTo(startX, startY);\n canvasDraw.lineTo(endX, endY);\n break;\n case 'normal':\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n break;\n }\n canvasDraw.stroke();\n canvasDraw.lineWidth = tempLineWidth;\n };\n ImageEditor.prototype.shapeText = function (canvasDraw) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n var yPoint = ((i + 1) * this.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);\n if (this.degree === -360) {\n this.degree = 0;\n }\n if (this.degree === 0 || this.degree === 180) {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.height) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.height -\n (this.activeObj.activePoint.height * 0.1);\n }\n }\n else {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.width) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.width -\n (this.activeObj.activePoint.width * 0.1);\n }\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n canvasDraw.font = textStyle + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n if (this.activeObj.flipObjColl.length === 4) {\n this.activeObj.flipObjColl = [];\n }\n for (var j = 0; j < this.activeObj.flipObjColl.length; j++) {\n if (this.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n if (this.activeObj.shapeDegree !== this.degree) {\n this.rotateText(canvasDraw);\n }\n else {\n canvasDraw.fillText(text, this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.1, this.activeObj.activePoint.startY + yPoint);\n }\n for (var k = 0; k < this.activeObj.flipObjColl.length; k++) {\n if (this.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n }\n this.currObjType.isText = false;\n };\n ImageEditor.prototype.updateActPoint = function (degree) {\n var ratio = this.calcRatio();\n if (degree.toLowerCase() === 'horizontal') {\n if (this.activeObj.activePoint.startX <= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.endX);\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startX >= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n else if (degree.toLowerCase() === 'vertical') {\n if (this.activeObj.activePoint.startY <= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.activeObj.activePoint.endY);\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startY >= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n };\n ImageEditor.prototype.drawSquareLines = function (canvasDraw) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords[0] === 'crop') {\n canvasDraw.strokeStyle = '#fff';\n }\n else {\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n }\n canvasDraw.beginPath();\n canvasDraw.rect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.rect(this.activeObj.activePoint.startX + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.startY + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.width - (2 * this.activeObj.strokeSettings.strokeWidth), this.activeObj.activePoint.height - (2 * this.activeObj.strokeSettings.strokeWidth));\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n };\n ImageEditor.prototype.drawSelection = function (horLineWidth, verLineHeight) {\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.beginPath();\n this.activeObj.horTopInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n verLineHeight, endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + verLineHeight };\n this.activeObj.horBottomInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n (2 * verLineHeight), endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + (2 * verLineHeight) };\n this.activeObj.verLeftInnerLine = { startX: this.activeObj.activePoint.startX + horLineWidth,\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + horLineWidth,\n endY: this.activeObj.activePoint.endY };\n this.activeObj.verRightInnerLine = { startX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n endY: this.activeObj.activePoint.endY };\n this.upperContext.moveTo(this.activeObj.horTopInnerLine.startX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horTopInnerLine.endX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.horBottomInnerLine.startX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horBottomInnerLine.endX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.verLeftInnerLine.startX, this.activeObj.verLeftInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verLeftInnerLine.endX, this.activeObj.verLeftInnerLine.endY);\n this.upperContext.moveTo(this.activeObj.verRightInnerLine.startX, this.activeObj.verRightInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verRightInnerLine.endX, this.activeObj.verRightInnerLine.endY);\n this.upperContext.stroke();\n this.upperContext.closePath();\n };\n ImageEditor.prototype.drawCenterCircles = function (canvasDraw) {\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY);\n canvasDraw.arc(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY, this.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY);\n canvasDraw.arc(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY, this.activeObj.centerLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY);\n canvasDraw.arc(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY, this.activeObj.centerRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY);\n canvasDraw.arc(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY, this.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n };\n ImageEditor.prototype.findTarget = function (x, y, type) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (type.toLowerCase() === 'mousedown' || type.toLowerCase() === 'touchstart') {\n var splitWords = void 0;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n isCrop = true;\n }\n }\n this.findTargetObj(x, y, ratio, isCrop);\n this.updateCursorStyles(x, y, ratio, type);\n }\n else {\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.activeObj.topLeftCircle.startX = x;\n this.activeObj.topLeftCircle.startY = y;\n break;\n case 'n-resize':\n this.activeObj.topCenterCircle.startX = x;\n this.activeObj.topCenterCircle.startY = y;\n break;\n case 'ne-resize':\n this.activeObj.topRightCircle.startX = x;\n this.activeObj.topRightCircle.startY = y;\n break;\n case 'w-resize':\n this.activeObj.centerLeftCircle.startX = x;\n this.activeObj.centerLeftCircle.startY = y;\n break;\n case 'e-resize':\n this.activeObj.centerRightCircle.startX = x;\n this.activeObj.centerRightCircle.startY = y;\n break;\n case 'sw-resize':\n this.activeObj.bottomLeftCircle.startX = x;\n this.activeObj.bottomLeftCircle.startY = y;\n break;\n case 's-resize':\n this.activeObj.bottomCenterCircle.startX = x;\n this.activeObj.bottomCenterCircle.startY = y;\n break;\n case 'se-resize':\n this.activeObj.bottomRightCircle.startX = x;\n this.activeObj.bottomRightCircle.startY = y;\n break;\n default:\n if (this.dragPoint.startX && this.dragPoint.startY) {\n this.previousPoint.x = this.dragPoint.endX;\n this.previousPoint.y = this.dragPoint.endY;\n this.dragPoint.endX = x;\n this.dragPoint.endY = y;\n }\n break;\n }\n }\n };\n ImageEditor.prototype.findTargetObj = function (x, y, ratio, isCrop) {\n if (this.objColl.length !== 0 && !this.currObjType.isCustomCrop && !isCrop) {\n var diffX = 0;\n var i = void 0;\n for (var index = 0; index < this.objColl.length; index++) {\n var actObj = extend({}, this.objColl[index], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n if (diffX === 0 || diffX > x - actObj.activePoint.startX) {\n diffX = x - this.objColl[index].activePoint.startX;\n i = index;\n }\n }\n }\n if (isNullOrUndefined(i)) {\n this.refreshActiveObj();\n return;\n }\n this.tempObjColl = extend([], this.objColl, [], true);\n this.currObjType.isCustomCrop = false;\n var temp = this.activeObj = extend({}, this.objColl[i], {}, true);\n this.objColl.splice(i, 1);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n if (this.degree === 0) {\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n }\n else {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (this.flipState !== '') {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n this.setActivePoint();\n this.upperContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.activeObj = extend({}, temp, {}, true);\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.factor !== 1 && (this.activeObj.activePoint.startX < this.pannStart.startX || this.activeObj.activePoint.startY <\n this.pannStart.startY) || (this.activeObj.activePoint.endX > endPoint.x || this.activeObj.activePoint.endY > endPoint.y)) {\n this.allowDrag = true;\n }\n this.tempStrokeSettings = extend({}, this.activeObj.strokeSettings, {}, true);\n this.tempTextSettings = extend({}, this.activeObj.textSettings, {}, true);\n if (this.activeObj.shape === 'text' && this.activeObj.shapeFlip !== this.currFlipState) {\n this.activeObj.flippedText = true;\n }\n if (this.activeObj.activePoint) {\n this.drawObject('duplicate', this.activeObj);\n }\n var shapeChangingArgs = { action: 'select', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n }\n };\n ImageEditor.prototype.updateCursorStyles = function (x, y, ratio, type) {\n var isResize = false;\n if (this.activeObj.keyHistory !== '' && this.activeObj.shape === undefined && !this.currObjType.isCustomCrop &&\n !this.currObjType.isLine && this.currObjType.isText) {\n this.activeObj.shape = 'text';\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.topLeftCircle)) {\n return;\n }\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'nw-resize') {\n actObj.topLeftCircle.startX = actObj.topLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'nw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'n-resize') {\n actObj.topCenterCircle.startX = actObj.topCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 'n-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'ne-resize') {\n actObj.topRightCircle.startX = actObj.topRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'ne-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'w-resize') {\n actObj.centerLeftCircle.startX = actObj.centerLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'w-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'e-resize') {\n actObj.centerRightCircle.startX = actObj.centerRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'e-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'sw-resize') {\n actObj.bottomLeftCircle.startX = actObj.bottomLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'sw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 's-resize') {\n actObj.bottomCenterCircle.startX = actObj.bottomCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 's-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'se-resize') {\n actObj.bottomRightCircle.startX = actObj.bottomRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'se-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else {\n this.dragPoint.startX = this.previousPoint.x = this.dragPoint.endX = x;\n this.dragPoint.startY = this.previousPoint.y = this.dragPoint.endY = y;\n }\n this.previousPoint.x = this.previousPoint.y = this.diffPoint.x = this.diffPoint.y = 0;\n if (type === 'touchstart') {\n if (isResize || (x >= actObj.activePoint.startX && x <= actObj.activePoint.endX\n && y >= actObj.activePoint.startY && y <= actObj.activePoint.endY)) {\n this.currObjType.isDragging = true;\n }\n }\n else {\n this.currObjType.isDragging = true;\n }\n };\n ImageEditor.prototype.drawCropRatio = function () {\n var x;\n var y;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'crop-square':\n case 'crop-circle':\n this.setDragDirection();\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.width = this.activeObj.activePoint.height;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n break;\n case 'crop-3:2':\n x = 3;\n y = 2;\n break;\n case 'crop-4:3':\n x = 4;\n y = 3;\n break;\n case 'crop-5:4':\n x = 5;\n y = 4;\n break;\n case 'crop-7:5':\n x = 7;\n y = 5;\n break;\n case 'crop-16:9':\n x = 16;\n y = 9;\n break;\n }\n if (x !== undefined && y !== undefined) {\n this.calcShapeRatio(x, y);\n }\n };\n ImageEditor.prototype.setDragDirection = function () {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = this.dragPoint.startX = ((this.lowerCanvas.width / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.startY = this.dragPoint.startY = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.endX = ((this.lowerCanvas.width / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2;\n this.activeObj.activePoint.startX = (centerX - centerY) + arcRadius;\n this.activeObj.activePoint.startY = (this.pannStart.startY) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleHeight) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleHeight) - (2 * arcRadius);\n }\n }\n else {\n if (this.factor === 1) {\n this.activeObj.activePoint.startY = this.dragPoint.startX = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.width) / 2)\n + arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.width) / 2) - arcRadius;\n this.activeObj.activePoint.startX = this.dragPoint.startX = arcRadius;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = this.dragPoint.startX = visibleWidth / 2;\n var centerY = (this.dragPoint.startY = visibleHeight / 2) + this.pannStart.startY;\n this.activeObj.activePoint.startX = this.pannStart.startX + arcRadius;\n this.activeObj.activePoint.startY = (centerY - centerX) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleWidth) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleWidth) - arcRadius;\n }\n }\n };\n ImageEditor.prototype.calcShapeRatio = function (x, y) {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var originalWidth = this.factor === 1 ? this.lowerCanvas.width : this.lowerCanvas.width / this.factor;\n var originalHeight = this.factor === 1 ? this.lowerCanvas.height : this.lowerCanvas.height / this.factor;\n var presetRatio = x / y;\n var standardSize = originalWidth >= originalHeight ? originalWidth : originalHeight;\n var width = standardSize * presetRatio;\n var height = standardSize;\n var scaleWidth = this.getScale(width, originalWidth);\n var snippetArray = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray.push(width * scaleWidth);\n }\n else {\n snippetArray.push(height * scaleWidth);\n }\n }\n width = snippetArray[0];\n height = snippetArray[1];\n var scaleHeight = this.getScale(height, originalHeight);\n var snippetArray1 = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray1.push(width * scaleHeight);\n }\n else {\n snippetArray1.push(height * scaleHeight);\n }\n }\n width = snippetArray1[0];\n height = snippetArray1[1];\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n this.activeObj.activePoint.startX = (this.dragPoint.startX = (originalWidth - width) / 2) + arcRadius;\n this.activeObj.activePoint.startY = (this.dragPoint.startY = (originalHeight - height) / 2) + arcRadius;\n this.activeObj.activePoint.endX = ((originalWidth - width) / 2 + width) - arcRadius;\n this.activeObj.activePoint.endY = ((originalHeight - height) / 2 + height) - arcRadius;\n if (this.factor !== 1) {\n this.activeObj.activePoint.startX += this.pannStart.startX;\n this.activeObj.activePoint.startY += this.pannStart.startY;\n this.activeObj.activePoint.endX += this.pannStart.startX;\n this.activeObj.activePoint.endY += this.pannStart.startY;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.getScale = function (value, originalValue) {\n return value > originalValue ? originalValue / value : 1;\n };\n ImageEditor.prototype.calcRatio = function () {\n var widthRatio;\n var heightRatio;\n if (this.degree === 0 || this.degree % 180 === 0) {\n widthRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n widthRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n return { width: widthRatio, height: heightRatio };\n };\n ImageEditor.prototype.calcMaxDimension = function (width, height) {\n var canvasMaxWidth = this.element.clientWidth;\n var canvasMaxHeight = this.element.clientHeight - this.toolbarHeight;\n canvasMaxHeight = Browser.isDevice ? canvasMaxHeight - this.toolbarHeight : canvasMaxHeight;\n canvasMaxWidth -= 30;\n canvasMaxHeight -= 30;\n var widthScale = canvasMaxWidth / width;\n var heightScale = canvasMaxHeight / height;\n var cssMaxWidth = Math.min(width, canvasMaxWidth);\n var cssMaxHeight = Math.min(height, canvasMaxHeight);\n if (widthScale < 1 && widthScale < heightScale) {\n cssMaxWidth = width * widthScale;\n cssMaxHeight = height * widthScale;\n }\n else if (heightScale < 1 && heightScale < widthScale) {\n cssMaxWidth = width * heightScale;\n cssMaxHeight = height * heightScale;\n }\n return { width: cssMaxWidth, height: cssMaxHeight };\n };\n ImageEditor.prototype.setMaximumDimension = function (degree) {\n var newWidth;\n var newHeight;\n if (degree % 90 === 0 && degree % 180 !== 0) {\n newWidth = this.baseImg.height;\n newHeight = this.baseImg.width;\n }\n else if (degree % 180 === 0 || degree === 0) {\n newWidth = this.baseImg.width;\n newHeight = this.baseImg.height;\n }\n this.lowerCanvas.width = this.upperCanvas.width = newWidth;\n this.lowerCanvas.height = this.upperCanvas.height = newHeight;\n var maxDimension = this.calcMaxDimension(newWidth, newHeight);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n };\n ImageEditor.prototype.setCursor = function (x, y) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (this.activeObj.horTopLine !== undefined) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n else if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n if (this.currObjType.isCustomCrop || this.togglePen) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (this.upperCanvas.style.cursor === 'default') {\n if (this.objColl.length > 0) {\n this.setCursorFromObj(x, y, this.objColl, ratio);\n }\n }\n };\n ImageEditor.prototype.setCursorFromObj = function (x, y, obj, ratio) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n for (var i = 0; i < obj.length; i++) {\n var actObj = extend({}, obj[i], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(obj[i], ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n break;\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n break;\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n break;\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n break;\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n break;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n break;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n break;\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n break;\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n break;\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n };\n ImageEditor.prototype.setCursorForZoomState = function (obj, ratio, isMouseMove) {\n var tempObj = extend({}, obj, {}, true);\n tempObj.activePoint.startX = (tempObj.activePoint.startX / ratio.width) * this.factor;\n tempObj.activePoint.startY = (tempObj.activePoint.startY / ratio.width) * this.factor;\n tempObj.activePoint.endX = (tempObj.activePoint.endX / ratio.width) * this.factor;\n tempObj.activePoint.endY = (tempObj.activePoint.endY / ratio.width) * this.factor;\n tempObj.activePoint.width = tempObj.activePoint.endX - tempObj.activePoint.startX;\n tempObj.activePoint.height = tempObj.activePoint.endY - tempObj.activePoint.startY;\n this.updateActiveObject(ratio, tempObj.activePoint, tempObj, isMouseMove);\n tempObj.topLeftCircle.radius = (tempObj.topLeftCircle.radius / ratio.width) * this.factor;\n return tempObj;\n };\n ImageEditor.prototype.downloadImg = function (blob, fileName) {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n ImageEditor.prototype.toSVGImg = function (fileName) {\n var dataUrl = this.lowerCanvas.toDataURL();\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.lowerCanvas.style.maxWidth);\n svg.setAttribute('height', this.lowerCanvas.style.maxHeight);\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.lowerCanvas.height.toString());\n img.setAttributeNS(null, 'width', this.lowerCanvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + this.lowerCanvas.width + \"\\\"\") + (\" height=\\\"\" + this.lowerCanvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName === null) {\n return svgDataUrl;\n }\n else {\n this.downloadImg(svgDataUrl, fileName + '.' + 'svg');\n return null;\n }\n };\n ImageEditor.prototype.toBlobFn = function (fileName, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n //proxy.baseImg.src = blobUrl;\n proxy.downloadImg(blobUrl, fileName + '.' + type);\n }, 'image/png');\n };\n ImageEditor.prototype.addLetter = function (letter) {\n if (this.textBox.style.display === 'none' && (this.currObjType.isText || this.activeObj.shape === 'text')) {\n if (letter === 'Backspace') {\n this.keyHistory = this.keyHistory.slice(0, -1);\n }\n else {\n this.keyHistory += letter;\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.keyHistory + this.tempKeyHistory).width\n + this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n this.upperContext.fillText(this.keyHistory + this.tempKeyHistory, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY +\n this.activeObj.textSettings.fontSize);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isText = true;\n this.setActivePoint(width, height);\n }\n };\n ImageEditor.prototype.updateFontStyles = function (isTextBox) {\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n var fontSize = isTextBox ? parseFloat(this.textBox.style.fontSize) : this.activeObj.textSettings.fontSize;\n var fontFamily = this.textBox.style.display === 'block' ? this.textBox.style.fontFamily : this.activeObj.textSettings.fontFamily;\n this.upperContext.font = textStyle + fontSize + 'px' + ' ' + fontFamily;\n };\n ImageEditor.prototype.updateInMemoryCanvas = function (operation) {\n if (!this.disabled) {\n var imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.imgDataColl.push({ operation: operation, value: imgData });\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n }\n };\n ImageEditor.prototype.calcPrevRatio = function () {\n var oldWidthRatio;\n var oldHeightRatio;\n var maxDimension;\n if (this.degree === 0 || this.degree % 180 === 0) {\n maxDimension = this.calcMaxDimension(this.baseImg.height, this.baseImg.width);\n oldWidthRatio = this.baseImg.height / maxDimension.width;\n oldHeightRatio = this.baseImg.width / maxDimension.height;\n }\n else {\n maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n oldWidthRatio = this.baseImg.width / maxDimension.width;\n oldHeightRatio = this.baseImg.height / maxDimension.height;\n }\n return { width: oldWidthRatio, height: oldHeightRatio };\n };\n ImageEditor.prototype.textFlipDegree = function (canvasDraw, startX, startY) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n var yPoint = (this.activeObj.textSettings.fontSize * 0.85) + lineHeight;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n if (i > 0) {\n if (i === 1) {\n yPoint -= (this.activeObj.textSettings.fontSize * 0.85);\n }\n yPoint += this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.15;\n }\n canvasDraw.fillText(text, startX + this.activeObj.textSettings.fontSize * 0.15, startY +\n yPoint + (i > 0 ? this.activeObj.textSettings.fontSize * 0.25 : -this.activeObj.textSettings.fontSize * 0.35));\n }\n };\n ImageEditor.prototype.rotateText = function (canvasDraw) {\n var startX = this.activeObj.activePoint.startX;\n var startY = this.activeObj.activePoint.startY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (degree % 360 === 0 && (this.degree !== -360 || this.currFlipState === '')) {\n startX = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.15;\n startY = this.activeObj.activePoint.startY + (this.activeObj.activePoint.endY - this.activeObj.activePoint.startY);\n var rows = this.activeObj.keyHistory.split('\\n');\n for (var i = 0; i < rows.length; i++) {\n startY = this.activeObj.activePoint.startY + (i * this.activeObj.textSettings.fontSize +\n this.activeObj.textSettings.fontSize * 0.25);\n canvasDraw.fillText(rows[i], startX, startY);\n }\n }\n else if (degree % 90 === 0 && degree % 180 !== 0) {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n canvasDraw.translate(-this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree % 90 === 0 && degree % 270 !== 0) {\n startY = (this.lowerCanvas.width - this.activeObj.activePoint.endX) + this.activeObj.textSettings.fontSize * 0.4;\n startX = this.activeObj.activePoint.startY;\n }\n else if (degree % 270 === 0) {\n startX = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n startY = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.4;\n }\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.height / 2, this.lowerCanvas.width / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n else {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n startY = (this.lowerCanvas.height - this.activeObj.activePoint.endY) + this.activeObj.textSettings.fontSize * 0.4;\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.redrawSelection = function () {\n var ratio = this.calcRatio();\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n };\n ImageEditor.prototype.redrawObj = function (degree) {\n if (this.objColl.length > 0) {\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n this.updateCurrentActiveObjPoint(degree);\n }\n else if (degree === 90 || degree === -90) {\n this.updateCurrentActiveObjPoint(degree);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n else {\n this.updateCurrentActiveObjPoint('zoom');\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n }\n else if (this.objColl.length === 0 && (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape === undefined)) {\n this.redrawSelection();\n }\n else if (this.activeObj.horTopLine !== undefined && this.activeObj.shape !== undefined) {\n var splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n }\n }\n else if ((degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n else {\n this.redrawSelection();\n }\n }\n };\n ImageEditor.prototype.updateCurrentActiveObjPoint = function (degree) {\n var oldRatio = this.calcPrevRatio();\n var ratio = this.calcRatio();\n var currActObjIndex;\n for (var index = 0; index < this.objColl.length; index++) {\n if (this.activeObj.shape === this.objColl[index].shape &&\n this.activeObj.activePoint.startX === this.objColl[index].activePoint.startX &&\n this.activeObj.activePoint.startY === this.objColl[index].activePoint.startY &&\n this.activeObj.activePoint.endX === this.objColl[index].activePoint.endX &&\n this.activeObj.activePoint.endY === this.objColl[index].activePoint.endY &&\n this.activeObj.currIndex === this.objColl[index].currIndex) {\n currActObjIndex = index;\n break;\n }\n }\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n if (degree === 'horizontal' || degree === 'Horizontal') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startX <= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width - this.objColl[i].activePoint.endX;\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n else if (degree === 'vertical' || degree === 'Vertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startY <= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height - this.objColl[i].activePoint.endY;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n if (currActObjIndex !== undefined) {\n this.activeObj = extend({}, this.objColl[currActObjIndex], {}, true);\n }\n }\n else if (degree === 90 || degree === -90) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX /= oldRatio.width;\n this.objColl[i].activePoint.startY /= oldRatio.height;\n this.objColl[i].activePoint.endX /= oldRatio.width;\n this.objColl[i].activePoint.endY /= oldRatio.height;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth /= (oldRatio.width / this.factor);\n this.calcCurrPoints(degree, this.objColl[i]);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX *= oldRatio.width;\n this.objColl[i].activePoint.startY *= oldRatio.height;\n this.objColl[i].activePoint.endX *= oldRatio.width;\n this.objColl[i].activePoint.endY *= oldRatio.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth *= ratio.width;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n };\n ImageEditor.prototype.calcCurrPoints = function (degree, obj) {\n var oldRatio = this.calcPrevRatio();\n if (degree > 0) {\n var x = obj.activePoint.startX;\n obj.activePoint.startX = (this.lowerCanvas.width / oldRatio.width) - (obj.activePoint.startY + obj.activePoint.width);\n obj.activePoint.startY = x;\n }\n else {\n var y = obj.activePoint.startY;\n obj.activePoint.startY = (this.lowerCanvas.height / oldRatio.height) - (obj.activePoint.startX + obj.activePoint.height);\n obj.activePoint.startX = y;\n }\n };\n ImageEditor.prototype.redrawShape = function (obj) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(obj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate', obj);\n };\n ImageEditor.prototype.applyActObj = function () {\n var isActObj = false;\n if (this.activeObj.shape !== undefined && this.activeObj.shape === 'text' && this.activeObj.keyHistory === '') {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n var splitWords = void 0;\n var isCropSelection = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0 && !isCropSelection) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n isActObj = true;\n break;\n }\n }\n if (!isActObj) {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.activeObj.currIndex = 'shape_' + (this.objColl.length + 1);\n }\n var splitWords_2 = this.activeObj.currIndex.split('_');\n var tempObjColl = this.objColl.splice(0, parseInt(splitWords_2[1], 10) - 1);\n tempObjColl.push(extend({}, this.activeObj, {}, true));\n for (var i = 0; i < this.objColl.length; i++) {\n tempObjColl.push(this.objColl[i]);\n }\n this.objColl = tempObjColl;\n tempObjColl = [];\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.activeObj.flippedText = false;\n this.currObjType.shape = '';\n this.refreshActiveObj();\n }\n }\n }\n };\n ImageEditor.prototype.apply = function (shape, obj, canvas) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if ((this.togglePen) && !this.currObjType.isCustomCrop) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.upperCanvas.toBlob(function (blob) {\n showSpinner(proxy_1.element);\n proxy_1.element.style.opacity = '0.5';\n proxy_1.lowerContext.clearRect(0, 0, proxy_1.lowerCanvas.width, proxy_1.lowerCanvas.height);\n var temp = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = proxy_1.initialAdjustmentValue = proxy_1.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy_1.cssClass) {\n addClass([proxy_1.element], proxy_1.cssClass.split(' '));\n }\n proxy_1.lowerContext.drawImage(proxy_1.inMemoryCanvas, 0, 0);\n proxy_1.baseImg.src = URL.createObjectURL(blob);\n proxy_1.upperContext.clearRect(0, 0, proxy_1.upperCanvas.width, proxy_1.upperCanvas.height);\n proxy_1.togglePen = false;\n proxy_1.upperCanvas.style.cursor = 'default';\n proxy_1.lowerContext.filter = temp;\n var tempFilter = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = proxy_1.objColl.length; i < len; i++) {\n proxy_1.apply(proxy_1.objColl[i].shape, proxy_1.objColl[i], 'duplicate');\n }\n proxy_1.lowerContext.filter = tempFilter;\n proxy_1.togglePen = true;\n }, 'image/png');\n this.degree = 0;\n }\n else {\n canvas = canvas ? canvas : 'original';\n this.currObjType.shape = shape !== undefined ? shape : this.currObjType.shape;\n if (this.currObjType.shape !== '') {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject(canvas, obj);\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n if (!shape && this.currObjType.shape !== '' && !this.currObjType.isCustomCrop) {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n this.keyHistory = '';\n }\n }\n }\n };\n ImageEditor.prototype.setCenterPoints = function (text, width, height) {\n var renderWidth;\n var renderHeight;\n if (text && width && height) {\n renderWidth = width;\n renderHeight = height;\n }\n else {\n renderWidth = this.activeObj.activePoint.width;\n renderHeight = this.activeObj.activePoint.height;\n }\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.lowerCanvas.width / 2) - renderWidth / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height / 2) - renderHeight / 2;\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + renderWidth / 2;\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) + renderHeight / 2;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2 + this.pannStart.startY;\n this.activeObj.activePoint.startX = centerX - (renderWidth / 2);\n this.activeObj.activePoint.startY = centerY - (renderHeight / 2);\n this.activeObj.activePoint.endX = centerX + (renderWidth / 2);\n this.activeObj.activePoint.endY = centerY + (renderHeight / 2);\n }\n if (text && width && height) {\n this.textStartPoints.x = this.activeObj.activePoint.startX;\n this.textStartPoints.y = this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.drawShape = function (type, strokeWidth, strokeColor, fillColor, start, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n this.redrawActObj();\n this.togglePen = false;\n this.keyHistory = '';\n this.upperCanvas.style.display = 'block';\n this.refreshActiveObj();\n this.currObjType.shape = type;\n if (this.currObjType.shape.toLowerCase() !== 'freehanddraw' && this.currObjType.shape.toLowerCase() !== '') {\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeWidth = strokeWidth ? strokeWidth : this.activeObj.strokeSettings.strokeWidth;\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = fillColor ? fillColor : this.activeObj.strokeSettings.fillColor;\n var tempWidth = 100 / this.factor;\n var tempHeight = 100 / this.factor;\n this.activeObj.activePoint.width = tempWidth * ratio.width;\n this.activeObj.activePoint.height = tempHeight * ratio.height;\n if (this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.lineDraw = 'horizontal';\n this.activeObj.activePoint.height /= 2;\n }\n else if (this.currObjType.shape.toLowerCase() === 'rectangle') {\n this.activeObj.activePoint.width += this.activeObj.activePoint.width / 2;\n }\n if (this.currObjType.shape.toLowerCase() === 'ellipse' && width) {\n this.activeObj.activePoint.width = 2 * width;\n this.activeObj.activePoint.height = 2 * height;\n }\n if (width && height) {\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n }\n if (start !== undefined) {\n this.activeObj.activePoint.startX = start.x;\n this.activeObj.activePoint.startY = start.y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n else {\n this.setCenterPoints();\n }\n this.currObjType.isDragging = this.currObjType.isCustomCrop = false;\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.flipObjColl = [];\n this.drawObject('duplicate');\n this.refreshToolbar('shapes');\n }\n }\n };\n ImageEditor.prototype.drawShapeText = function (text, fontFamily, fontSize, bold, italic, strokeColor, x, y) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n var ratio = this.calcRatio();\n this.togglePen = false;\n this.redrawActObj();\n this.keyHistory = '';\n this.refreshActiveObj();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.currObjType.isCustomCrop = false;\n this.currObjType.isText = this.currObjType.isInitialText = true;\n this.upperCanvas.style.display = 'block';\n this.currObjType.shape = this.activeObj.shape = 'text';\n if (isNullOrUndefined(this.activeObj.textSettings)) {\n this.activeObj.textSettings = this.textSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.fontSize = fontSize ? fontSize : this.activeObj.textSettings.fontSize;\n this.activeObj.textSettings.bold = bold ? bold : this.activeObj.textSettings.bold;\n this.activeObj.textSettings.italic = italic ? italic : this.activeObj.textSettings.italic;\n if (isNullOrUndefined(this.activeObj.textSettings.fontSize)) {\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.width / 20));\n }\n else {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.height / 20));\n }\n if (this.activeObj.textSettings.fontSize < 20 * (ratio.width + ratio.height)) {\n this.activeObj.textSettings.fontSize = 20 * (ratio.width + ratio.height);\n }\n if (this.factor > 1) {\n this.activeObj.textSettings.fontSize /= this.factor;\n }\n }\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.textSettings.text).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n else {\n this.setCenterPoints(true, width, height);\n }\n this.addLetter(this.activeObj.textSettings.text);\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.refreshToolbar('text');\n }\n };\n ImageEditor.prototype.drawPen = function (context) {\n var ratio = this.calcRatio();\n context = context ? context : this.upperContext;\n this.upperCanvas.style.display = 'block';\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = (ratio.width + ratio.height) * 0.4;\n }\n context.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n context.lineWidth = 2 * (this.activeObj.strokeSettings.strokeWidth) / this.factor;\n context.beginPath();\n context.moveTo(this.prevX, this.prevY);\n context.lineTo(this.currX, this.currY);\n context.stroke();\n context.closePath();\n };\n ImageEditor.prototype.getObjDetails = function (obj) {\n var shapeDetails = {};\n shapeDetails.id = obj.currIndex;\n shapeDetails.type = obj.shape;\n shapeDetails.startX = obj.activePoint.startX;\n shapeDetails.startY = obj.activePoint.startY;\n if (obj.shape === 'rectangle') {\n shapeDetails.width = obj.activePoint.width;\n shapeDetails.height = obj.activePoint.height;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'ellipse') {\n shapeDetails.radius = obj.activePoint.width / 2;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'line') {\n shapeDetails.length = obj.activePoint.width;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'text') {\n shapeDetails.text = obj.keyHistory;\n shapeDetails.fontSize = obj.textSettings.fontSize;\n shapeDetails.color = obj.strokeSettings.strokeColor;\n shapeDetails.fontStyle = [];\n if (obj.textSettings.bold) {\n shapeDetails.fontStyle.push('bold');\n }\n if (obj.textSettings.italic) {\n shapeDetails.fontStyle.push('italic');\n }\n }\n return shapeDetails;\n };\n ImageEditor.prototype.isPointsInRange = function (x, y) {\n var inRange = false;\n if (this.factor === 1) {\n if (x >= 0 && y >= 0 && x <= this.lowerCanvas.width && y <= this.lowerCanvas.width) {\n inRange = true;\n }\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (x >= this.pannStart.startX && y >= this.pannStart.startY && x <= endPoint.x && y <= endPoint.y) {\n inRange = true;\n }\n }\n return inRange;\n };\n ImageEditor.prototype.updateInMemoryContext = function (imgData, isUpdate) {\n var temp = extend({}, this.activeObj, {}, true);\n this.redrawImgWithObj();\n this.activeObj = temp;\n if (isNullOrUndefined(isUpdate)) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n };\n ImageEditor.prototype.clearActObj = function () {\n if (this.textBox.style.display === 'none') {\n this.refreshActiveObj();\n this.applyActObj();\n this.refreshActiveObj();\n this.currObjType.isCustomCrop = false;\n }\n };\n ImageEditor.prototype.rotateMultiple = function (length, degree) {\n for (var i = 0; i < length; i++) {\n if (degree > 0) {\n this.degree += 90;\n }\n else {\n this.degree -= 90;\n }\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(90 * (i + 1));\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.redrawObj(90);\n }\n else {\n this.redrawObj(-90);\n }\n }\n };\n ImageEditor.prototype.setBrightness = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.brightness = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('brightness', value);\n }\n };\n ImageEditor.prototype.setContrast = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.contrast = value;\n value = this.getFilterValue(value);\n value *= 100;\n this.updateAdjustment('contrast', value);\n }\n };\n ImageEditor.prototype.setHue = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.hue = value;\n value *= 3;\n this.updateAdjustment('hue', value);\n }\n };\n ImageEditor.prototype.setSaturation = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.saturation = value;\n value = this.getSaturationFilterValue(value);\n value *= 100;\n this.updateAdjustment('saturation', value);\n }\n };\n ImageEditor.prototype.setOpacity = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.opacity = value;\n if (value >= 50) {\n value /= 100;\n }\n else if (value === 40) {\n value = 0.45;\n }\n else if (value === 30) {\n value = 0.40;\n }\n else if (value === 20) {\n value = 0.35;\n }\n else if (value === 10) {\n value = 0.30;\n }\n else if (value === 0) {\n value = 0.25;\n }\n this.updateAdjustment('opacity', value);\n }\n };\n ImageEditor.prototype.setBlur = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.blur = value;\n value /= 20;\n this.updateAdjustment('blur', value);\n }\n };\n ImageEditor.prototype.setExposure = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.exposure = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('exposure', value);\n }\n };\n ImageEditor.prototype.setFilter = function (type) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.updateAdjustment(type, null);\n }\n };\n ImageEditor.prototype.setBlackAndWhiteFilter = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.bw = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('bw');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('bw');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('bw');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getBlackAndWhiteData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.setSharpness = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.sharpen = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('sharpen');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('sharpen');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('sharpen');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getSharpenData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.replaceBWSharpenData = function (type) {\n this.tempImageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n var imageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (type === 'sharpen') {\n imageData = this.getSharpenData(this.tempImageData);\n }\n else {\n imageData = this.getBlackAndWhiteData(imageData);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n var tempObj;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'updateCanvas', value: imageData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n };\n ImageEditor.prototype.updateBWSharpness = function () {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.imgDataColl.shift();\n };\n ImageEditor.prototype.getSharpenData = function (imageData) {\n var data = imageData.data;\n var weights = [0, -1, 0, -1, 5, -1, 0, -1, 0];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var sw = imageData.width;\n var sh = imageData.height;\n var output = this.inMemoryContext.createImageData(sw, sh);\n var dst = output.data;\n // go through the destination image pixels\n var alphaFac = 0;\n var r;\n var g;\n var b;\n var a;\n var dstOff;\n var scx;\n var scy;\n var srcOff;\n var wt;\n var x;\n var y;\n var cx;\n var cy;\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n return output;\n };\n ImageEditor.prototype.getFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + ((value * 0.5) / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = ((value - 1) * 100) / 0.5;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + (value / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = (value - 1) * 100;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getBlackAndWhiteData = function (imageData) {\n for (var i = 0; i < imageData.data.length; i += 4) {\n var count = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n var colour = 0;\n if (count > 383) {\n colour = 255;\n }\n imageData.data[i] = colour;\n imageData.data[i + 1] = colour;\n imageData.data[i + 2] = colour;\n imageData.data[i + 3] = 255;\n }\n return imageData;\n };\n /**\n * Clear a current selection.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.clearSelection = function () {\n if (!this.disabled && this.imgDataColl.length > 0) {\n this.togglePen = false;\n this.refreshActiveObj();\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n this.currObjType.shape = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isActiveObj = true;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n }\n };\n /**\n * Crops an image based on the selection.\n * The selection can be done through programmatically using the select method or through UI interactions.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.crop = function () {\n var isCrop = false;\n var splitWords;\n var transitionArgs = { startPoint: { x: this.activeObj.activePoint.startX, y: this.activeObj.activePoint.startY }, endPoint: { x: this.activeObj.activePoint.endX, y: this.activeObj.activePoint.endY } };\n this.trigger('cropping', transitionArgs);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (!this.disabled && this.activeObj.horTopLine !== undefined && (this.currObjType.isCustomCrop || splitWords[0] === 'crop')) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n isCrop = true;\n var canvasFilter = this.canvasFilter;\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.lowerContext.filter = this.canvasFilter = 'none';\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.activeObj = tempActObj;\n this.upperCanvas.style.display = 'none';\n var widthRatio = void 0;\n var heightRatio = void 0;\n var imgData = void 0;\n var zoomedRotate = false;\n var factor = this.factor;\n if (this.factor === 1) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n imgData = this.imgDataColl[0].value;\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n if (this.degree !== 0 && this.flipState !== '') {\n this.degree = 0;\n }\n if (this.degree !== 0) {\n zoomedRotate = true;\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (this.degree === 180) {\n this.updateInMemoryContext(imgData);\n }\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n if (this.degree !== 180) {\n this.updateInMemoryContext(imgData);\n }\n this.degree = 0;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.flipState !== '') {\n zoomedRotate = true;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.flipState = '';\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n if (!zoomedRotate) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n var cssObj = window.getComputedStyle(this.lowerCanvas);\n this.lowerCanvas.style.left = this.upperCanvas.style.left =\n ((this.element.clientWidth - parseInt(cssObj.width, 10) - 18) / 2) + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = ((this.element.clientHeight - this.toolbarHeight\n - parseInt(cssObj.height, 10)) / 2) + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.activeObj.shape === 'crop-circle') {\n var imgData_1 = this.lowerContext.getImageData(0, 0, this.baseImg.width, this.baseImg.height);\n this.inMemoryCanvas.width = imgData_1.width;\n this.inMemoryCanvas.height = imgData_1.height;\n this.inMemoryContext.putImageData(imgData_1, 0, 0);\n this.lowerContext.save();\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.baseImg.width, this.baseImg.height);\n this.lowerContext.globalCompositeOperation = 'destination-in';\n this.lowerContext.beginPath();\n this.lowerContext.arc(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2, this.lowerCanvas.width / 2, 0, Math.PI * 2);\n this.lowerContext.closePath();\n this.lowerContext.fill();\n this.lowerContext.restore();\n this.currObjType.isActiveObj = true;\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var blobUrl_1;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n blobUrl_1 = URL.createObjectURL(blob);\n proxy_2.baseImg.src = blobUrl_1;\n proxy_2.imgDataColl = [];\n }, 'image/png');\n this.objColl = [];\n this.refreshActiveObj();\n this.degree = 0;\n this.flipState = '';\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.globalAlpha = 0;\n this.lowerContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.factor = 1;\n this.canvasFilter = canvasFilter;\n }\n return isCrop;\n };\n /**\n * Flips an image by horizontally or vertically.\n *\n * @param {Direction } direction - Specifies the direction to flip the image.\n * @returns {void}.\n */\n ImageEditor.prototype.flip = function (direction) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var transitionArgs = { direction: direction };\n this.trigger('flipping', transitionArgs);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (direction.toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n if (this.flipState === '' || this.flipState.toLowerCase() === 'vertical') {\n this.flipState = 'horizontal';\n }\n if (this.currFlipState.toLowerCase() === 'horizontal') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'horizontal';\n }\n }\n else {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n if (this.flipState.toLowerCase() === '' || this.flipState.toLowerCase() === 'horizontal') {\n this.flipState = 'vertical';\n }\n if (this.currFlipState.toLowerCase() === 'vertical') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'vertical';\n }\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n if (this.flipState.toLowerCase() === 'horizontal') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n }\n else if (this.flipState.toLowerCase() === 'vertical') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n }\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n if (this.objColl[i].flipObjColl.length === 0) {\n this.objColl[i].flipObjColl.push(direction);\n }\n else if (this.objColl[i].flipObjColl[this.objColl[i].flipObjColl.length - 1] === direction) {\n this.objColl[i].flipObjColl.pop();\n }\n else {\n this.objColl[i].flipObjColl.push(direction);\n }\n }\n this.redrawObj(direction.toLowerCase());\n if (this.flipState === '') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: this.lowerCanvas.width,\n endY: this.lowerCanvas.height, width: this.lowerCanvas.width, height: this.lowerCanvas.height };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n }\n this.refreshToolbar('main');\n }\n };\n /**\n * Return an image as ImageData.\n *\n * @returns {ImageData}.\n */\n ImageEditor.prototype.getImageData = function () {\n var data = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n return data;\n };\n /**\n * Load/opens an image for editing within an image editor.\n *\n * @param {string | ImageData } data - Specifies url of the Image or image data.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.open = function (data) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_3 = this;\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_11 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_11) {\n toolbar_11.style.display = 'none';\n }\n if (this.defToolbarItems.length === 0 &&\n (isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n this.toolbarHeight = 0;\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.update();\n }\n this.degree = 0;\n this.flipState = '';\n this.factor = 1;\n this.imgDataColl = [];\n var type = typeof (data);\n if (type === 'string') {\n this.imageOnLoad(data);\n }\n else {\n var tempFilter = this.lowerContext.filter;\n this.lowerCanvas = document.querySelector('#' + this.element.id + '_lowerCanvas');\n this.upperCanvas = document.querySelector('#' + this.element.id + '_upperCanvas');\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.upperContext = this.upperCanvas.getContext('2d');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.baseImg.width = data.width;\n this.inMemoryCanvas.height = this.baseImg.height = data.height;\n this.inMemoryContext.putImageData(data, 0, 0);\n this.imgDataColl.push({ operation: 'open', value: data });\n this.lowerCanvas.width = this.upperCanvas.width = data.width;\n this.lowerCanvas.height = this.upperCanvas.height = data.height;\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = temp;\n this.redrawImg(this.lowerContext.filter);\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy_3.element);\n proxy_3.baseImg.src = URL.createObjectURL(blob);\n }, 'image/png');\n }\n }\n };\n /**\n * Reset all the changes and revert to original image.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.reset = function () {\n if (!this.disabled) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n if (this.imgDataColl.length > 0) {\n if (this.imgDataColl[0].operation === 'freehanddraw') {\n this.imgDataColl.splice(0, 1);\n this.imgDataColl.splice(1, 1);\n }\n this.inMemoryCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n this.redrawImg(this.lowerContext.filter);\n this.lowerCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.baseImg.height;\n }\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.baseImg.src = this.baseImgSrc.id;\n this.factor = 1;\n this.refreshToolbar('main');\n if (Browser.isDevice && document.getElementById(this.element.id + '_bottomToolbar')) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n this.objColl = [];\n this.imgDataColl = [];\n this.degree = 0;\n this.flipState = this.keyHistory = this.currFlipState = '';\n this.upperCanvas.style.display = 'none';\n this.togglePan = this.togglePen = false;\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.dragCanvas = this.activeObj.flippedText = false;\n this.currImgData = {};\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.lineWidth = this.upperContext.lineWidth = undefined;\n this.lastX = this.lastY = 0;\n this.dragStart = { x: 0, y: 0 };\n this.touchEndPoint = {};\n this.prevX = this.currX = this.prevY = this.currY = 0;\n this.tempKeyHistory = '';\n this.currentToolbar = 'main';\n this.textStartPoints = { x: 0, y: 0 };\n this.fontSizeColl = this.penDrawColl = [];\n this.textBox.value = this.textBox.textContent = '';\n this.textBox.style.display = 'none';\n this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.textSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.tempTextSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.refreshActiveObj();\n this.timer = undefined;\n this.penStrokeWidth = undefined;\n this.isScreenOriented = false;\n this.tempObjColl = [];\n this.tempObjColl = undefined;\n this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.canvasFilter = this.currentFilter = this.tempAdjustmentValue = '';\n this.lowerContext.filter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100\n + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.tempImageData = undefined;\n this.sharpenedImgData = this.isBrightnessAdjusted = this.isInitialLoading = false;\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n }\n };\n /**\n * Rotate an image to clockwise and anti-clockwise.\n *\n * @param {number} degree - Specifies a degree to rotate an image.\n * positive integer value for clockwise and negative integer value for anti-clockwise rotation.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.rotate = function (degree) {\n var isRotate = false;\n if (!this.disabled && this.imgDataColl.length > 0 && (degree % 90 === 0)) {\n isRotate = true;\n var transitionArgs = { degree: degree };\n this.trigger('rotating', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var length_1 = Math.abs(degree / 90);\n if (length_1 > 1) {\n this.rotateMultiple(length_1, degree);\n }\n else {\n this.degree += degree;\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(this.degree);\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * degree);\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n this.lowerContext.rotate(Math.PI / 180 * -degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.redrawObj(degree);\n }\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n this.factor = 1;\n this.refreshToolbar('main');\n }\n return isRotate;\n };\n /**\n * Export an image using the specified file name and the extension.\n *\n * @param {string} type - Specifies a format of image to be saved.\n * @param {string} fileName – Specifies a file name to be saved\n *\n * @returns {void}.\n */\n ImageEditor.prototype.export = function (type, fileName) {\n var _this = this;\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.applyPenDraw();\n }\n this.applyActObj();\n this.lowerContext.filter = this.canvasFilter;\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n type = type ? type : 'Png';\n this.redrawActObj();\n var beforeSave = { cancel: false, fileName: fileName ? fileName : 'ImageEditor', fileType: type };\n var saved_1 = { fileName: fileName ? fileName : 'ImageEditor', fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n _this.currObjType.isSave = true;\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || 'ImageEditor';\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || 'ImageEditor';\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || 'ImageEditor';\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n _this.trigger('saved', saved_1);\n _this.refreshToolbar('main');\n }\n });\n }\n };\n /**\n * Perform selection in an image editor. The selection helps to crop an image.\n *\n * @param {string} type - Specifies the shape - circle / square / custom selection / pre-defined ratios.\n * @param {number} startX – Specifies the start x-coordinate point of the selection.\n * @param {number} startY – Specifies the start y-coordinate point of the selection.\n * @param {number} width - Specifies the width of the selection area.\n * @param {number} height - Specifies the height of the selection area.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created : () => {\n * imageObj.select('16:9', 10, 10);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.select = function (type, startX, startY, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n var points = void 0;\n this.redrawActObj();\n this.refreshActiveObj();\n this.keyHistory = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.upperCanvas.style.display = 'block';\n var cropShape = 'crop-' + type;\n if (cropShape.toLowerCase() === 'crop-custom') {\n if (this.currObjType.shape === '') {\n this.currObjType.isCustomCrop = true;\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperCanvas.style.cursor = 'crosshair';\n if (Browser.isDevice) {\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX + arcRadius, startY: this.pannStart.startY + arcRadius,\n endX: endPoint.x - arcRadius, endY: endPoint.y - arcRadius };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (startX && startY) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n this.activeObj.activePoint.startX = startX + ratio.width;\n this.activeObj.activePoint.startY = startY + ratio.height;\n this.activeObj.activePoint.endX = this.baseImg.width - (2 * ratio.width);\n this.activeObj.activePoint.endY = this.baseImg.height - (2 * ratio.height);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.drawObject('duplicate');\n }\n }\n else if (cropShape.toLowerCase() === 'crop-canvas') {\n this.upperCanvas.style.display = 'none';\n this.dragCanvas = true;\n }\n else {\n this.currObjType.isCustomCrop = false;\n this.currObjType.shape = cropShape.toLowerCase();\n if (width && height) {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,\n width: width, height: height };\n }\n else if (width && cropShape === 'crop-circle') {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,\n width: width, height: width };\n }\n this.activeObj.shape = cropShape.toLowerCase();\n this.drawObject('duplicate', null, null, true, points);\n }\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'crosshair';\n this.drawPen();\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n this.applyPenDraw();\n }\n this.refreshToolbar('pen');\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.freehandDraw = function (value) {\n this.freeHandDraw(value);\n };\n /**\n * Enable or disable a panning on the Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable panning.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.pan = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (value) {\n this.togglePan = true;\n this.redrawActObj();\n this.dragCanvas = true;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.refreshActiveObj();\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n /**\n * Increase / Decrease the magnification of an image.\n *\n * @param {boolean} value - Specifies a value to be zoomed on the image.\n * @returns {void}.\n */\n ImageEditor.prototype.zoom = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if ((this.factor === 1 && value < 0) || (this.factor > 8 && value > 0)) {\n return;\n }\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.upperCanvas.style.cursor = 'default';\n if (this.degree !== 0) {\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (value === 0.1 || value === -0.1) {\n this.lastX = this.lowerCanvas.width / 2;\n this.lastY = this.lowerCanvas.height / 2;\n }\n if (value === 1.1 || value === -1.1) {\n this.zoomImg(value);\n }\n else {\n if (value > 0) {\n this.zoomImg(3.75);\n }\n else {\n this.zoomImg(-3.75);\n }\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n this.autoEnablePan();\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n this.refreshToolbar('main');\n }\n else {\n this.refreshToolbar('main', true, true);\n }\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n }\n };\n /**\n * Draw ellipse on an image.\n *\n * @param {number} x - Specifies x-coordinate of ellipse.\n * @param {number} y - Specifies y-coordinate of ellipse.\n * @param {number} radiusX - the radius x point for the ellipse.\n * @param {number} radiusY - the radius y point for the ellipse.\n * @param {number} strokeWidth - the stroke width of ellipse.\n * @param {string} strokeColor - the stroke color of ellipse.\n * @param {string} fillColor - the fill color of the ellipse.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawEllipse(10, 10, 40, 60);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.drawEllipse = function (x, y, radiusX, radiusY, strokeWidth, strokeColor, fillColor) {\n var isEllipse = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isEllipse = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('ellipse', strokeWidth, strokeColor, fillColor, start, radiusX, radiusY);\n }\n return isEllipse;\n };\n /**\n * Draw line on an image.\n *\n * @param {number} startX – Specifies start point x-coordinate of line.\n * @param {number} startY – Specifies start point y-coordinate of line.\n * @param {number} endX - Specifies end point x-coordinates of line.\n * @param {number} endY - Specifies end point y-coordinates of the line.\n * @param {number} strokeWidth - Specifies the stroke width of line.\n * @param {string} strokeColor - Specifies the stroke color of line.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawLine = function (startX, startY, endX, endY, strokeWidth, strokeColor) {\n var isLine = false;\n var inRange = this.isPointsInRange(startX, startY);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isLine = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: startX, y: startY };\n var width = endX - startX;\n var height = endY - startY;\n this.drawShape('line', strokeWidth, strokeColor, null, start, width, height);\n }\n return isLine;\n };\n /**\n * Draw a rectangle on an image.\n *\n * @param {number} x - Specifies x-coordinate of rectangle.\n * @param {number} y - Specifies y-coordinate of rectangle.\n * @param {number} width - Specifies the width of the rectangle.\n * @param {number} height - Specifies the height of the rectangle.\n * @param {number} strokeWidth - Specifies the stroke width of rectangle.\n * @param {string} strokeColor - Specifies the stroke color of rectangle.\n * @param {string} fillColor - the fill color of the rectangle.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawRectangle = function (x, y, width, height, strokeWidth, strokeColor, fillColor) {\n var isRectangle = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isRectangle = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj,\n currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('rectangle', strokeWidth, strokeColor, fillColor, start, width, height);\n }\n return isRectangle;\n };\n /**\n * Draw a text on an image.\n *\n * @param {number} x - Specifies x-coordinate of text.\n * @param {number} y - Specifies y-coordinate of text.\n * @param {string} text - Specifies the text to add on an image.\n * @param {string} fontFamily - Specifies the font family of the text.\n * @param {number} fontSize - Specifies the font size of the text.\n * @param {boolean} bold - Specifies whether the text is bold or not.\n * @param {boolean} italic - Specifies whether the text is italic or not.\n * @param {string} color - Specifies font color of the text.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawText(10, 10, 'Syncfusion', 'Arial', 12, true, true, '#000');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n *\n * </script>\n * ```\n */\n ImageEditor.prototype.drawText = function (x, y, text, fontFamily, fontSize, bold, italic, color) {\n var isText = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isText = true;\n this.drawShapeText(text, fontFamily, fontSize, bold, italic, color, x, y);\n }\n return isText;\n };\n /**\n * Selects a shape based on the given shape id. The id can be got from the public method ‘getShapeSettings’.\n *\n * @param {string} id - Specifies the shape id to select a shape on an image.\n * @returns {boolean}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.selectShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.selectShape = function (id) {\n this.applyActObj();\n var obj;\n var isSelected;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n if (isNullOrUndefined(obj)) {\n isSelected = false;\n }\n else {\n isSelected = true;\n this.activeObj = obj;\n this.lowerContext.filter = this.canvasFilter;\n this.redrawShape(this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (this.activeObj.shape === 'pen') {\n this.refreshToolbar('pen');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems(this.calcRatio());\n }\n return isSelected;\n };\n /**\n * Deletes a shape based on the given shape id. The id can be got from the public method getShapeSettings.\n *\n * @param {string} id - Specifies the shape id to delete the shape on an image.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.deleteShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.deleteShape = function (id) {\n this.applyActObj();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.refreshToolbar('main');\n };\n /**\n * Get particular shapes details based on id of the shape which is drawn on an image editor.\n *\n * @param {string} id - Specifies the shape id on an image.\n * @returns {ShapeSettings}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.getShapeSetting('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.getShapeSetting = function (id) {\n this.applyActObj();\n var obj;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n var shapeDetails = this.getObjDetails(obj);\n return shapeDetails;\n };\n /**\n * Get all the shapes details which is drawn on an image editor.\n *\n * @returns {ShapeSettings[]}.\n */\n ImageEditor.prototype.getShapeSettings = function () {\n this.applyActObj();\n var shapeDetailsColl = [];\n for (var i = 0; i < this.objColl.length; i++) {\n var shapeDetails = this.getObjDetails(this.objColl[i]);\n shapeDetailsColl.push(shapeDetails);\n }\n return shapeDetailsColl;\n };\n /**\n * To refresh the Canvas Wrapper.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.update = function () {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n if (Browser.isDevice) {\n canvasWrapper.style.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3;\n }\n else {\n canvasWrapper.style.height = this.element.offsetHeight - this.toolbarHeight - 1 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - this.toolbarHeight - 1;\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFilterOptions } filterOption - Specifies the filter options to the image.\n * @returns {void}.\n */\n ImageEditor.prototype.applyImageFilter = function (filterOption) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.setFilter(filterOption.toString());\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFinetuneOptions } finetuneOption - Specifies the finetune options to the image.\n * @param {number } value - Specifies the value for finetuning the image.\n * @returns {void}.\n *\n */\n ImageEditor.prototype.finetuneImage = function (finetuneOption, value) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n switch (finetuneOption) {\n case 'Brightness':\n this.setBrightness(value);\n break;\n case 'Contrast':\n this.setContrast(value);\n break;\n case 'Hue':\n this.setHue(value);\n break;\n case 'Saturation':\n this.setSaturation(value);\n break;\n case 'Opacity':\n this.setOpacity(value);\n break;\n case 'Blur':\n this.setBlur(value);\n break;\n case 'Exposure':\n this.setExposure(value);\n break;\n }\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canUndo = function () {\n return false;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canRedo = function () {\n return false;\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.clear = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.clear.call(this);\n }\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.draw = function (text, fontFamily, fontSize) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.draw.call(this, text, fontFamily, fontSize);\n }\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.getBlob = function (url) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return url;\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.isEmpty = function () {\n return false;\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.load = function (signature, width, height) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.load.call(this, signature, width, height);\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.undo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.undo.call(this);\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.redo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.redo.call(this);\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {FileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.save = function (type, fileName) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.save.call(this, type, fileName);\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.saveAsBlob = function () {\n return null;\n };\n /**\n * Returns the persistence data for component.\n *\n * @returns {any}.\n * @private\n */\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.getLocalData = function () {\n return null;\n };\n var ImageEditor_1;\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"disabled\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"height\", void 0);\n __decorate([\n Property('Bootstrap5')\n ], ImageEditor.prototype, \"theme\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], ImageEditor.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], ImageEditor.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], ImageEditor.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], ImageEditor.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], ImageEditor.prototype, \"velocity\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Complex({}, FinetuneSettings)\n ], ImageEditor.prototype, \"finetuneSettings\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"signatureValue\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"zooming\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"panning\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"cropping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"rotating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"flipping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"shapeChanging\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fileOpened\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"saved\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarCreated\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarUpdating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarItemClicked\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"imageFiltering\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fineTuneValueChanging\", void 0);\n ImageEditor = ImageEditor_1 = __decorate([\n NotifyPropertyChanges\n ], ImageEditor);\n return ImageEditor;\n}(SignatureBase));\nexport { ImageEditor };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","FinetuneSettings","_super","apply","Property","ChildProperty","ImageEditor","options","element","_this","call","degree","dragCanvas","dragElement","keyHistory","flipState","mouseDownPoint","x","y","previousPoint","dragPoint","startX","startY","endX","endY","diffPoint","oldPoint","objColl","undoRedoColl","imgDataColl","strokeSettings","strokeColor","fillColor","strokeWidth","textSettings","text","fontFamily","fontSize","bold","italic","underline","tempStrokeSettings","tempTextSettings","toolbarHeight","pannStart","pannEnd","togglePan","disablePan","lastX","lastY","dragStart","factor","currFlipState","touchEndPoint","prevX","currX","prevY","currY","togglePen","currentToolbar","textStartPoints","fontSizeColl","tempKeyHistory","penDrawColl","allowDrag","textRow","activeObj","activePoint","width","height","flipObjColl","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","isFiltered","isSave","defToolbarItems","baseImgSrc","isTimer","isScreenOriented","isFirstMove","startTouches","tempTouches","adjustmentLevel","brightness","contrast","hue","opacity","saturation","blur","exposure","sharpen","bw","tempAdjustmentLevel","adjustmentValue","initialAdjustmentValue","tempAdjustmentValue","currentFilter","tempFilter","canvasFilter","sharpenedImgData","tempSharpenFilter","tempBWFilter","isBrightnessAdjusted","isInitialLoading","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Undo","Redo","Transform","Annotation","Finetune","Brightness","Contrast","Hue","Saturation","Opacity","Blur","Sharpen","Exposure","Filter","Default","Chrome","Cold","Warm","Grayscale","BlackAndWhite","Sepia","Invert","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","Browse","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","finetuneSettings","updateFinetunes","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createContextualToolbar","createCanvas","updateContext","lowerContext","filter","createSpinner","defaultValue","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textBox","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","initializeFilter","setBrightness","setContrast","setHue","setSaturation","setExposure","setOpacity","setBlur","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","toLowerCase","charAt","toUpperCase","slice","join","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","inMemoryCanvas","setAttribute","offsetWidth","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","isNullOrUndefined","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","template","Uploader","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbar_2","updateContextualToolbar","cType","querySelector","contextualToolbarArea","left","offsetLeft","refreshSlider","initFilterToolbarItem","renderSlider","cHt","ht","top","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","proxy","iconCss","drpDownBtn","DropDownButton","open","args","cancelPan","parentElement","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","transformSelect","imageEditorObj","getInstance","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","pushActItemIntoObj","extend","pop","currentValue","hex","operation","currentObj","previousObj","redrawShape","rgba","fillDDB_1","children","toggle","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","temp","strokeDDB_2","setTextBoxStylesToActObj","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","redrawText","updateFontStyles","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","measureText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","updateObjColl","initZoomToolbarItem","contextualToolbarClicked","selEle","imageFiltering","setFilter","zoom","transform","redrawImgWithObj","setSharpness","setBlackAndWhiteFilter","j","cancelItems","okBtn","reset","unselectBtn","drawImage","selElem","crop","redrawActObj","applyActObj","callMainToolbar","sliderWrapper","slider","hdrWrapper","ej2_instances","updateAdjustment","isPreview","opacityValue","brightnessValue","values","getFilterValue","temp_1","saturate","bright","saturatePercentage","saturatePercent","getSaturationFilterValue","getDefaultFilter","setTempFilterValue","tempFilter_1","updateBrightnessFilter","autoEnablePan","tempSplitWords","setAdjustment","valueArr","setFilterValue","setSaturationFilterValue","labelWrapper","styles","min","max","getCurrAdjustmentValue","Slider","tooltip","isVisible","placement","showOn","step","setCurrAdjustmentValue","fineTuneValueChanging","finetune","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","tempCanvas","tempContext","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","splice","putImageData","isCropping","initPenToolbarItem","initAdjustmentToolbarItem","getAdjustmentToolbarItem","getFilterToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","penStrokeWidth","getPenStroke","drpDownBtn_2","setPenStroke","createCanvasFilter","tempImageData","noFilter","ctx","chrome","cold","warm","grayscale","sepia","invert","updateCanvas","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","shapeDegree","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","targetTouches","touches","pageX","pageY","calculateScale","endTouches","startDistance","getDistance","sqrt","preventDefault","setTimeout","currentTarget","clientX","clientY","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","setCursor","initialDraw","updateActivePoint","drawObject","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","bbox","setPanPoints","tempObjColl","applyCurrActObj","shapeChangingArgs","beforeSave","fileName","fileType","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","offsetY","transformedPoint","drawPanImg","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","xform","DOMMatrix","getTransform","savedTransforms","save","restore","sx","sy","scaleNonUniform","radians","PI","dx","dy","f","m2","multiply","setTransform","DOMPoint","matrixTransform","inverse","m11","m12","m13","m14","m21","m22","m23","m24","zoomImg","clicks","zoomPoint","zoomLevel","pow","handleScroll","delta","wheelDelta","detail","p1","p2","isInside","actObj","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","setTextBoxPos","point","setTextBoxPoints","shapeFlip","JSON","stringify","radius","border","overflow","setTextBoxHeight","textBoxTop","textBoxWidth","letterWidth","textWidth","textHeight","abs","selectInfo","shapeResizingArgs","shapeMovingArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","percentage","prevDiffX","prevDiffY","maxText","newScale","getScaleRatio","isTextBox","maxi","maxStr","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","tempWidth","ellipse","closePath","arc","clip","drawOuterSelection","isInitialDraw","isCropCircle","getZoomShape","rect","topRightCircle","bottomLeftCircle","bottomRightCircle","fill","drawCenterCircles","obj","canvas","isCropRatio","drawCropRatio","isCrop","drawShapeObj","actPoint","isMouseMove","horCircleWidth","verCircleHeight","horBottomLine","verLeftLine","verRightLine","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineTo","lineHeight","yPoint","updateActPoint","rotateText","fillText","k","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","findTargetObj","updateCursorStyles","diffX","data","currImgData","getSharpenData","getBlackAndWhiteData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","updateInMemoryContext","isUpdate","clearActObj","rotateMultiple","boolean","replaceBWSharpenData","tempDegree","tempFlipState","imageData","updateBWSharpness","g","dstOff","scx","scy","srcOff","wt","cx","cy","weights","side","halfSide","sw","sh","output","createImageData","dst","filterValue","colour","proxy_2","tempActObj","zoomedRotate","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","globalAlpha","direction","activeObjShape","proxy_3","toolbar_11","update","isRotate","length_1","saved_1","cropShape","freehandDraw","panBtn","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","applyImageFilter","filterOption","finetuneImage","finetuneOption","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Complex","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-image-editor.umd.min.js","sources":["../src/image-editor/image-editor.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Property, addClass, removeClass, extend } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, getComponent, getInstance, isNullOrUndefined, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '@syncfusion/ej2-inputs';\nimport { Toolbar } from '@syncfusion/ej2-navigations';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { ColorPicker, Uploader, Slider } from '@syncfusion/ej2-inputs';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Complex, compile, compile as templateCompiler, Browser, detach, select, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Interface for image finetune values.\n */\nvar FinetuneSettings = /** @class */ (function (_super) {\n __extends(FinetuneSettings, _super);\n function FinetuneSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"brightness\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"contrast\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"hue\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"saturation\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"exposure\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"opacity\", void 0);\n __decorate([\n Property(null)\n ], FinetuneSettings.prototype, \"blur\", void 0);\n return FinetuneSettings;\n}(ChildProperty));\nexport { FinetuneSettings };\n/**\n * Image Editor is a graphical user interface that helps to edit an image by performing actions like selection,\n * cropping, rotating, inserting text and shapes (rectangles, ellipses, lines), and drawing free hand on top of an image.\n *\n ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({});\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\nvar ImageEditor = /** @class */ (function (_super) {\n __extends(ImageEditor, _super);\n /**\n *\n * Constructor for creating the widget\n *\n * @param {ImageEditorModel} options - Specifies the image editor model\n * @param {string|HTMLDivElement} element - Specifies the target element\n */\n function ImageEditor(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.degree = 0; // current rotated state\n _this.dragCanvas = false;\n _this.dragElement = '';\n _this.keyHistory = ''; // text history\n _this.flipState = ''; // current flip state whether horizontal or vertical or none\n _this.mouseDownPoint = { x: 0, y: 0 };\n _this.previousPoint = { x: 0, y: 0 }; // updates prev x and y points in mouseMove\n _this.dragPoint = { startX: 0, startY: 0, endX: 0, endY: 0 }; // updates drag start and end points in mousedown and mousemove\n _this.diffPoint = { x: 0, y: 0 }; // updates resize points\n _this.oldPoint = {};\n _this.objColl = []; // shapes, text obj collection\n _this.undoRedoColl = [];\n _this.imgDataColl = []; // collection of Image Data mainly used for reset state\n _this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.textSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n _this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n _this.toolbarHeight = 46;\n _this.pannStart = {};\n _this.pannEnd = {};\n _this.togglePan = false;\n _this.disablePan = false;\n _this.lastX = 0;\n _this.lastY = 0;\n _this.dragStart = { x: 0, y: 0 };\n _this.factor = 1; // current zoomed state\n _this.currFlipState = '';\n _this.touchEndPoint = {};\n _this.prevX = 0;\n _this.currX = 0;\n _this.prevY = 0;\n _this.currY = 0;\n _this.togglePen = false;\n _this.currentToolbar = 'main';\n _this.textStartPoints = { x: 0, y: 0 };\n _this.fontSizeColl = [];\n _this.tempKeyHistory = '';\n _this.penDrawColl = [];\n _this.allowDrag = false;\n _this.textRow = 1;\n _this.activeObj = { activePoint: { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 },\n flipObjColl: [] };\n _this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n _this.defToolbarItems = [];\n _this.baseImgSrc = {};\n _this.isTimer = false;\n _this.isScreenOriented = false;\n _this.isFirstMove = false;\n _this.startTouches = [];\n _this.tempTouches = [];\n _this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0,\n exposure: 0, sharpen: false, bw: false };\n _this.adjustmentValue = '';\n _this.initialAdjustmentValue = '';\n _this.tempAdjustmentValue = '';\n _this.currentFilter = '';\n _this.tempFilter = '';\n _this.canvasFilter = '';\n _this.sharpenedImgData = false;\n _this.tempSharpenFilter = false;\n _this.tempBWFilter = false;\n _this.isBrightnessAdjusted = false;\n _this.isInitialLoading = false;\n _this.imageFileName = '';\n return _this;\n }\n ImageEditor_1 = ImageEditor;\n ImageEditor.prototype.preRender = function () {\n // pre render code snippets\n this.element.id = this.element.id || getUniqueID('ej2-image-editor');\n if (Browser.isDevice) {\n this.element.classList.add('e-device');\n }\n this.themeColl = {\n Bootstrap5: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Bootstrap5Dark: { primaryColor: '#0d6efd', secondaryColor: '#fff' },\n Tailwind: { primaryColor: '#4f46e5', secondaryColor: '#fff' },\n TailwindDark: { primaryColor: '#22d3ee', secondaryColor: '#fff' },\n Fluent: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n FluentDark: { primaryColor: '#0078d4', secondaryColor: '#fff' },\n Bootstrap4: { primaryColor: '#007bff', secondaryColor: '#fff' },\n Bootstrap: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n BootstrapDark: { primaryColor: '#317ab9', secondaryColor: '#fff' },\n Material: { primaryColor: '#e3165b', secondaryColor: '#fff' },\n MaterialDark: { primaryColor: '#00b0ff', secondaryColor: '#fff' },\n Fabric: { primaryColor: '#0078d6', secondaryColor: '#fff' },\n FabricDark: { primaryColor: '#0074cc', secondaryColor: '#fff' },\n Highcontrast: { primaryColor: '#000000', secondaryColor: '#fff' }\n };\n this.defaultLocale = {\n Crop: 'Crop',\n ZoomIn: 'Zoom In',\n ZoomOut: 'Zoom Out',\n Undo: 'Undo',\n Redo: 'Redo',\n Transform: 'Transform',\n Annotation: 'Annotation',\n Finetune: 'Finetune',\n Brightness: 'Brightness',\n Contrast: 'Contrast',\n Hue: 'Hue',\n Saturation: 'Saturation',\n Opacity: 'Opacity',\n Blur: 'Blur',\n Sharpen: 'Sharpen',\n Exposure: 'Exposure',\n Filter: 'Filter',\n Default: 'Default',\n Chrome: 'Chrome',\n Cold: 'Cold',\n Warm: 'Warm',\n Grayscale: 'Grayscale',\n BlackAndWhite: 'Black and White',\n Sepia: 'Sepia',\n Invert: 'Invert',\n Text: 'Add Text',\n Pen: 'Pen',\n Reset: 'Reset',\n Save: 'Save',\n Select: 'Select',\n RotateLeft: 'Rotate Left',\n RotateRight: 'Rotate Right',\n HorizontalFlip: 'Horizontal Flip',\n VerticalFlip: 'Vertical Flip',\n OK: 'OK',\n Cancel: 'Cancel',\n FillColor: 'Fill Color',\n StrokeColor: 'Stroke Color',\n StrokeWidth: 'Stroke Width',\n FontFamily: 'Font Family',\n FontStyle: 'Font Style',\n FontSize: 'Font Size',\n FontColor: 'Font Color',\n Pan: 'Pan',\n Move: 'Move',\n Load: 'Load',\n Custom: 'Custom',\n Square: 'Square',\n Circle: 'Circle',\n Ellipse: 'Ellipse',\n Rectangle: 'Rectangle',\n Line: 'Line',\n Bold: 'Bold',\n Italic: 'Italic',\n BoldItalic: 'Bold Italic',\n XSmall: 'X-Small',\n Small: 'Small',\n Medium: 'Medium',\n Large: 'Large',\n XLarge: 'X-Large',\n ABC: 'ABC',\n Browse: 'Browse'\n };\n this.l10n = new L10n('image-editor', this.defaultLocale, this.locale);\n };\n /**\n *\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ImageEditor.prototype.render = function () {\n this.initialize();\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ImageEditor.prototype.getModuleName = function () {\n return 'image-editor';\n };\n /**\n *\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n * @private\n */\n ImageEditor.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n *\n * Called internally if any of the property value changed.\n *\n * @param {ImageEditorModel} newProperties - Specifies new properties\n * @param {ImageEditorModel} oldProperties - Specifies old properties\n * @returns {void}\n * @private\n */\n ImageEditor.prototype.onPropertyChanged = function (newProperties, oldProperties) {\n for (var _i = 0, _a = Object.keys(newProperties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n if (oldProperties.cssClass) {\n removeClass([this.element], oldProperties.cssClass.split(' '));\n }\n if (newProperties.cssClass) {\n addClass([this.element], newProperties.cssClass.split(' '));\n }\n break;\n case 'disabled':\n if (newProperties.disabled) {\n this.element.classList.add('e-disabled');\n this.unwireEvent();\n }\n else {\n this.element.classList.remove('e-disabled');\n this.wireEvent();\n }\n break;\n case 'height':\n this.element.style.height = newProperties.height;\n break;\n case 'width':\n this.element.style.width = newProperties.width;\n break;\n case 'theme':\n if (newProperties.theme) {\n this.updateTheme();\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n }\n break;\n case 'finetuneSettings':\n if (newProperties.finetuneSettings) {\n this.finetuneSettings = newProperties.finetuneSettings;\n this.updateFinetunes();\n }\n break;\n }\n }\n };\n ImageEditor.prototype.destroy = function () {\n var classList = [];\n this.element.removeAttribute('tabindex');\n if (this.cssClass) {\n classList = classList.concat(this.cssClass.split(' '));\n }\n removeClass([this.element], classList);\n if (!this.element.getAttribute('class')) {\n this.element.removeAttribute('class');\n }\n this.destroySubComponents();\n this.unwireEvent();\n _super.prototype.destroy.call(this);\n this.element.innerHTML = '';\n this.trigger('destroyed');\n };\n ImageEditor.prototype.initialize = function () {\n this.updateFinetunes();\n this.createToolbar();\n this.createContextualToolbar();\n this.createCanvas();\n this.wireEvent();\n this.updateContext(this.lowerContext);\n this.updateContext(this.upperContext);\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.filter = this.canvasFilter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n if (this.element) {\n createSpinner({\n target: this.element\n });\n }\n };\n ImageEditor.prototype.updateFinetunes = function () {\n if (this.finetuneSettings) {\n if (this.finetuneSettings.brightness) {\n this.adjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n this.tempAdjustmentLevel.brightness = this.finetuneSettings.brightness.defaultValue;\n }\n if (this.finetuneSettings.contrast) {\n this.adjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n this.tempAdjustmentLevel.contrast = this.finetuneSettings.contrast.defaultValue;\n }\n if (this.finetuneSettings.hue) {\n this.adjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n this.tempAdjustmentLevel.hue = this.finetuneSettings.hue.defaultValue;\n }\n if (this.finetuneSettings.saturation) {\n this.adjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n this.tempAdjustmentLevel.saturation = this.finetuneSettings.saturation.defaultValue;\n }\n if (this.finetuneSettings.exposure) {\n this.adjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n this.tempAdjustmentLevel.exposure = this.finetuneSettings.exposure.defaultValue;\n }\n if (this.finetuneSettings.opacity) {\n this.adjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n this.tempAdjustmentLevel.opacity = this.finetuneSettings.opacity.defaultValue;\n }\n if (this.finetuneSettings.blur) {\n this.adjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n this.tempAdjustmentLevel.blur = this.finetuneSettings.blur.defaultValue;\n }\n this.isInitialLoading = true;\n }\n };\n /**\n *\n * This Method will add events to component (element, event, method, current reference)\n *\n * @returns {void}.\n */\n ImageEditor.prototype.wireEvent = function () {\n EventHandler.add(document, 'keydown', this.keyDownEventHandler, this);\n EventHandler.add(document, 'keypress', this.keyUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousedown', this.mouseDownEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler, this);\n EventHandler.add(this.upperCanvas, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler, this);\n EventHandler.add(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler, this);\n EventHandler.add(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.canvasMouseUpHandler, this);\n EventHandler.add(this.upperCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchstart', this.touchStartHandler, this);\n EventHandler.add(this.upperCanvas, 'dblclick', this.findTextPoint, this);\n EventHandler.add(this.textBox, 'mousedown', this.findTextPoint, this);\n window.addEventListener('resize', this.windowResizeHandler.bind(this));\n if (!Browser.isIos && Browser.info.name !== 'safari' && screen && screen.orientation) {\n screen.orientation.addEventListener('change', this.screenOrientation.bind(this));\n }\n };\n /**\n *\n * This Method will remove events from component\n *\n * @returns {void}.\n */\n ImageEditor.prototype.unwireEvent = function () {\n EventHandler.remove(document, 'keydown', this.keyDownEventHandler);\n EventHandler.remove(document, 'keypress', this.keyUpEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousedown', this.mouseDownEventHandler);\n EventHandler.remove(this.upperCanvas, 'mousemove', this.mouseMoveEventHandler);\n EventHandler.remove(this.upperCanvas, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpEventHandler);\n EventHandler.remove(this.lowerCanvas, 'mousedown', this.canvasMouseDownHandler);\n EventHandler.remove(this.lowerCanvas, 'mousemove', this.canvasMouseMoveHandler);\n EventHandler.remove(this.lowerCanvas, 'mouseup', this.canvasMouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.canvasMouseUpHandler);\n };\n ImageEditor.prototype.initializeFilter = function () {\n this.setBrightness(this.adjustmentLevel.brightness);\n this.setContrast(this.adjustmentLevel.contrast);\n this.setHue(this.adjustmentLevel.hue);\n this.setSaturation(this.adjustmentLevel.saturation);\n this.setExposure(this.adjustmentLevel.exposure);\n this.setOpacity(this.adjustmentLevel.opacity);\n this.setBlur(this.adjustmentLevel.blur);\n };\n ImageEditor.prototype.destroySubComponents = function () {\n var inputElement = this.element.querySelectorAll('input.e-control');\n var btnElement = this.element.querySelectorAll('button.e-control');\n for (var i = 0, len = inputElement.length; i < len; i++) {\n if (inputElement[i].classList.contains('e-color-picker')) {\n getComponent(inputElement[i], 'color-picker').destroy();\n detach(select('input#' + inputElement[i].id, this.element));\n }\n }\n for (var i = 0, len = btnElement.length; i < len; i++) {\n if (btnElement[i].classList.contains('e-dropdown-btn')) {\n getComponent(btnElement[i], 'dropdown-btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n else if (btnElement[i].classList.contains('e-btn')) {\n getComponent(btnElement[i], 'btn').destroy();\n detach(select('button#' + btnElement[i].id, this.element));\n }\n }\n };\n ImageEditor.prototype.updateTheme = function () {\n if (this.theme !== '') {\n this.theme = this.toPascalCase(this.theme);\n }\n };\n ImageEditor.prototype.toPascalCase = function (str) {\n var strArr = str.toLowerCase().split('-');\n for (var i = 0; i < strArr.length; i++) {\n strArr[i] = strArr[i].charAt(0).toUpperCase() + strArr[i].slice(1);\n }\n return strArr.join('');\n };\n ImageEditor.prototype.createCanvas = function () {\n var height = this.toolbarHeight;\n this.element.style.width = this.width;\n this.element.style.height = this.height;\n var canvasWrapper = this.element.appendChild(this.createElement('div', { id: this.element.id + '_canvasWrapper',\n className: 'e-canvas-wrapper', attrs: { style: 'height:' + (this.element.offsetHeight - height) + 'px; width:' +\n (this.element.offsetWidth)\n + 'px; position: relative; overflow: hidden; margin: 0 auto;' }\n }));\n this.lowerCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_lowerCanvas', attrs: { name: 'canvasImage' }\n }));\n this.upperCanvas = canvasWrapper.appendChild(this.createElement('canvas', {\n id: this.element.id + '_upperCanvas', attrs: { name: 'canvasImage' }\n }));\n this.inMemoryCanvas = this.createElement('canvas', {\n id: this.element.id + '_inMemoryCanvas', attrs: { name: 'canvasImage' }\n });\n this.textBox = canvasWrapper.appendChild(this.createElement('textarea', {\n id: this.element.id + '_textBox', attrs: { name: 'textBox' }\n }));\n this.textBox.setAttribute('spellcheck', 'false');\n this.upperCanvas.width = this.lowerCanvas.width = this.inMemoryCanvas.width = this.element.offsetWidth;\n this.upperCanvas.height = this.lowerCanvas.height = this.inMemoryCanvas.height = (this.element.offsetHeight - this.toolbarHeight);\n this.upperCanvas.style.position = this.lowerCanvas.style.position = this.textBox.style.position = 'absolute';\n this.textBox.style.backgroundColor = 'transparent';\n this.textBox.style.display = 'none';\n this.textBox.style.resize = 'none';\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.baseImg = this.createElement('img', {\n id: this.element.id + '_orgImg', attrs: { name: 'Image', crossorigin: 'anonymous' }\n });\n this.upperCanvas.style.cursor = 'default';\n this.upperCanvas.style.display = 'none';\n this.upperContext = this.upperCanvas.getContext('2d');\n this.inMemoryContext = this.inMemoryCanvas.getContext('2d');\n };\n ImageEditor.prototype.createToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_toolbarArea', className: 'e-toolbar-area'\n }));\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarItems = { cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) };\n if (isNullOrUndefined(this.defToolbarItems)) {\n this.defToolbarItems = [];\n }\n this.defToolbarItems.push(toolbarItems);\n var toolbarArea = document.getElementById(this.element.id + '_toolbarArea');\n var toolbar_1 = this.createElement('div', {\n id: this.element.id + '_toolbar'\n });\n toolbarArea.appendChild(toolbar_1);\n var uploadItems = [\n {\n cssClass: 'e-image-upload',\n align: 'Left', type: 'Input',\n template: new Uploader({\n selected: function () {\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n }\n })\n }\n ];\n new Toolbar({ items: uploadItems, width: '100%',\n created: function () {\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this) }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n }\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar'))) {\n this.toolbarHeight = document.getElementById(this.element.id + '_toolbar').clientHeight;\n }\n }\n else {\n this.toolbarHeight = 0;\n }\n };\n ImageEditor.prototype.createContextualToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', { id: this.element.id + '_contextualToolbarArea',\n className: 'e-contextual-toolbar-wrapper e-hide', attrs: { style: 'position: absolute;' }\n }));\n var toolbarArea = document.getElementById(this.element.id + '_contextualToolbarArea');\n var toolbar_2 = this.createElement('div', { id: this.element.id + '_contextualToolbar' });\n toolbarArea.appendChild(toolbar_2);\n }\n };\n ImageEditor.prototype.updateContextualToolbar = function (type, cType) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n var contextualToolbarArea = this.element.querySelector('#' + this.element.id + '_contextualToolbarArea');\n if (!isNullOrUndefined(toolbarArea) && !isNullOrUndefined(contextualToolbarArea)) {\n contextualToolbarArea.classList.remove('e-hide');\n contextualToolbarArea.style.left = toolbarArea.offsetLeft + 'px';\n }\n if (type === 'filter') {\n if (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')) && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(true);\n }\n this.refreshSlider();\n this.initFilterToolbarItem();\n }\n else {\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar'))\n && document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n this.refreshSlider();\n this.renderSlider(cType);\n }\n if (Browser.isDevice) {\n var cHt = contextualToolbarArea.offsetHeight;\n var ht = this.element.querySelector('#' + this.element.id + '_canvasWrapper').offsetHeight;\n contextualToolbarArea.style.top = this.toolbarHeight + ht - cHt + 'px';\n }\n else {\n contextualToolbarArea.style.top = this.toolbarHeight + 1 + 'px';\n }\n }\n };\n ImageEditor.prototype.createBottomToolbar = function () {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n this.element.appendChild(this.createElement('div', {\n id: this.element.id + '_bottomToolbarArea', className: 'e-bottom-toolbar'\n }));\n if (!this.toolbarTemplate) {\n document.getElementById(this.element.id + '_canvasWrapper').style.height = (this.element.offsetHeight\n - this.toolbarHeight * 2) - 3 + 'px';\n var toolbarArea = document.getElementById(this.element.id + '_bottomToolbarArea');\n var toolbarElem = this.createElement('div', {\n id: this.element.id + '_bottomToolbar'\n });\n toolbarArea.appendChild(toolbarElem);\n }\n this.initBottomToolbar();\n }\n };\n ImageEditor.prototype.initBottomToolbar = function () {\n var _this = this;\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)) {\n if (this.toolbarTemplate) {\n this.toolbarTemplateFn();\n }\n else {\n var items = this.getMainToolbarItem();\n new Toolbar({ items: items, width: '100%',\n created: function () {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n },\n clicked: this.defToolbarClicked.bind(this)\n }, '#' + this.element.id + '_bottomToolbar');\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_3 = getComponent(this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_3.refreshOverflow();\n }\n }\n }\n };\n ImageEditor.prototype.toolbarTemplateFn = function () {\n var template;\n var templateID = this.element.id + '_toolbar';\n var toolbarArea = this.element.querySelector('#' + this.element.id + '_toolbarArea');\n if (this.toolbarTemplate) {\n this.toolbarFn = this.templateParser(this.toolbarTemplate);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (this.isReact) {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n }\n else if (this.isAngular) {\n var templateColl = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID);\n template = (templateColl[0].nodeType === 3) ? templateColl[1] : templateColl[0];\n }\n else {\n template = this.toolbarFn({ type: 'toolbar' }, this, 'Template', templateID)[0];\n }\n toolbarArea.appendChild(template);\n this.renderReactTemplates();\n }\n };\n ImageEditor.prototype.templateParser = function (template) {\n if (template) {\n try {\n if (document.querySelectorAll(template).length) {\n return templateCompiler(document.querySelector(template).innerHTML.trim());\n }\n else {\n return compile(template);\n }\n }\n catch (error) {\n return templateCompiler(template);\n }\n }\n return undefined;\n };\n ImageEditor.prototype.getLeftToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (!isOkBtn) {\n toolbarItems.push({ cssClass: 'e-image-upload', align: 'Left', type: 'Input', template: new Uploader({}) });\n toolbarItems.push({ visible: false, cssClass: 'e-image-position e-btn e-flat', tooltipText: 'Position', align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomOut') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomOut', prefixIcon: 'e-icons e-zoom-out', cssClass: 'top-icon e-dec-zoom',\n tooltipText: this.l10n.getConstant('ZoomOut'), align: 'Left' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('ZoomIn') > -1)) {\n toolbarItems.push({ id: this.element.id + '_zoomIn', prefixIcon: 'e-icons e-zoom-in', cssClass: 'top-icon e-inc-zoom',\n tooltipText: this.l10n.getConstant('ZoomIn'), align: 'Left' });\n }\n var tempToolbarItems = this.processToolbar('left');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getRightToolbarItem = function (isOkBtn) {\n var toolbarItems = [];\n if (isOkBtn) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Reset') > -1)) {\n toolbarItems.push({ id: this.element.id + '_reset', prefixIcon: 'e-icons e-btn-reset', cssClass: 'top-icon e-img-reset',\n tooltipText: this.l10n.getConstant('Reset'), align: 'Right' });\n }\n if (!isOkBtn) {\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Save') > -1)) {\n toolbarItems.push({ id: this.element.id + '_save', prefixIcon: 'e-icons e-btn-save', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Save'), align: 'Right', template: '<button id=\"' + this.element.id + '_saveBtn\"></button>' });\n }\n }\n var tempToolbarItems = this.processToolbar('right');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getMainToolbarItem = function (isApplyOption) {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Crop') > -1)) {\n toolbarItems.push({ id: this.element.id + '_crop', tooltipText: this.l10n.getConstant('Crop'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_cropBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Annotate') > -1)) {\n toolbarItems.push({ id: this.element.id + '_annotation', tooltipText: this.l10n.getConstant('Annotation'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_annotationBtn\"></button>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Transform') > -1)) {\n toolbarItems.push({ id: this.element.id + '_transform', tooltipText: this.l10n.getConstant('Transform'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_transformBtn\"></button>'\n });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Finetune') > -1)) {\n toolbarItems.push({ id: this.element.id + '_adjustment', prefixIcon: 'e-icons e-adjustment', cssClass: 'top-icon e-adjustment',\n tooltipText: this.l10n.getConstant('Finetune'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Filter') > -1)) {\n toolbarItems.push({ id: this.element.id + '_filter', prefixIcon: 'e-icons e-filters', cssClass: 'top-icon e-filters',\n tooltipText: this.l10n.getConstant('Filter'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (isApplyOption) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getZoomToolbarItem = function () {\n var toolbarItems = [];\n if (this.factor > 1) {\n toolbarItems = [\n { id: this.element.id + '_pan', prefixIcon: 'e-icons e-pan', cssClass: 'top-icon e-img-pan',\n tooltipText: this.l10n.getConstant('Pan'), align: 'Left' }\n ];\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processToolbar = function (position) {\n var toolbarItems = [];\n if (this.toolbar) {\n for (var i = 0, len = this.toolbar.length; i < len; i++) {\n if (typeof (this.toolbar[i]) === 'object') {\n if (isNullOrUndefined(this.toolbar[i].align)) {\n if (position === 'left') {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n else if (this.toolbar[i].align.toLowerCase() === position) {\n toolbarItems.push(this.toolbar[i]);\n }\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.processSubToolbar = function (items) {\n var toolbarItems = [];\n if (items) {\n for (var i = 0, len = items.length; i < len; i++) {\n if (typeof (items[i]) === 'object') {\n items[i].align = 'Center';\n toolbarItems.push(items[i]);\n }\n }\n }\n return toolbarItems;\n };\n ImageEditor.prototype.isToolbar = function () {\n return (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.length > 0)\n || !isNullOrUndefined(this.toolbarTemplate));\n };\n ImageEditor.prototype.initToolbarItem = function (isApplyOption, isDevice, isOkBtn) {\n var _this = this;\n if (this.isToolbar()) {\n var leftItem = this.getLeftToolbarItem(isOkBtn);\n var rightItem = this.getRightToolbarItem(isOkBtn);\n var mainItem = this.getMainToolbarItem(isApplyOption);\n var zoomItem = this.getZoomToolbarItem();\n if (isDevice) {\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!isDevice) {\n _this.renderAnnotationBtn();\n _this.renderCropBtn();\n _this.renderTransformBtn();\n }\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'main' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n var zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n var pan = document.querySelector('#' + this.element.id + '_pan');\n if (!isNullOrUndefined(pan) && this.factor === 1) {\n pan.style.display = 'none';\n }\n else if (!isNullOrUndefined(pan)) {\n pan.style.display = 'block';\n }\n if (this.isToolbar() && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_4 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_4.refreshOverflow();\n }\n }\n };\n ImageEditor.prototype.createLeftToolbarControls = function () {\n if (this.defToolbarItems !== undefined && this.defToolbarItems.length > 0 &&\n (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n var uploadDiv = document.getElementById(this.element.id + '_toolbar')\n .querySelector('.e-image-upload');\n if (uploadDiv) {\n var uploadElem = uploadDiv.getElementsByTagName('input')[0];\n var uploadBtnElem = uploadDiv.getElementsByTagName('button')[0];\n uploadBtnElem.className = 'e-tbar-btn e-tbtn-txt e-btn top-icon';\n uploadBtnElem.innerHTML = '';\n uploadBtnElem.appendChild(this.createElement('span', {\n className: 'e-btn-icon e-icons e-upload-icon e-icon-left'\n }));\n uploadElem.onchange = this.fileSelect.bind(this, uploadElem);\n }\n }\n };\n ImageEditor.prototype.renderAnnotationBtn = function () {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Pen') > -1)) {\n items.push({ text: this.l10n.getConstant('Pen'), id: 'pen', iconCss: 'e-icons e-free-pen' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Line') > -1)) {\n items.push({ text: this.l10n.getConstant('Line'), id: 'line', iconCss: 'e-icons e-line' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Rectangle') > -1)) {\n items.push({ text: this.l10n.getConstant('Rectangle'), id: 'rectangle', iconCss: 'e-icons e-rectangle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Ellipse') > -1)) {\n items.push({ text: this.l10n.getConstant('Ellipse'), id: 'ellipse', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Text') > -1)) {\n items.push({ text: this.l10n.getConstant('Text'), id: 'text', iconCss: 'e-icons e-add-text' });\n }\n var drpDownBtn = new DropDownButton({ items: items, iconCss: 'e-icons e-annotation',\n cssClass: 'e-image-popup',\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n select: function (args) {\n var isCropSelection = false;\n var splitWords;\n if (_this.activeObj.shape !== undefined) {\n splitWords = _this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && _this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n _this.currObjType.isCustomCrop = false;\n if (isCropSelection || _this.togglePan) {\n _this.refreshActiveObj();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n _this.refreshToolbar('main');\n }\n switch (args.item.id) {\n case 'pen':\n proxy.currentToolbar = 'pen';\n _this.freeHandDraw(true);\n break;\n case 'text':\n proxy.currentToolbar = 'text';\n _this.drawShapeText();\n break;\n default:\n proxy.currentToolbar = 'shapes';\n proxy.drawShape((args.item.id).toLowerCase());\n break;\n }\n _this.updateToolbarItems(_this.calcRatio());\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn.appendTo('#' + this.element.id + '_annotationBtn');\n };\n ImageEditor.prototype.renderCropBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CustomSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Custom'), id: 'custom', iconCss: 'e-icons e-custom' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('CircleSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Circle'), id: 'circle', iconCss: 'e-icons e-circle' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('SquareSelection') > -1)) {\n items.push({ text: this.l10n.getConstant('Square'), id: 'square', iconCss: 'e-icons e-square' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RatioSelection') > -1)) {\n items.push({ text: '3:2', id: '3:2', iconCss: 'e-icons e-custom-a' });\n items.push({ text: '4:3', id: '4:3', iconCss: 'e-icons e-custom-b' });\n items.push({ text: '5:4', id: '5:4', iconCss: 'e-icons e-custom-c' });\n items.push({ text: '7:5', id: '7:5', iconCss: 'e-icons e-custom-d' });\n items.push({ text: '16:9', id: '16:9', iconCss: 'e-icons e-custom-e' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n },\n items: items, select: this.cropSelect.bind(this),\n iconCss: 'e-icons e-select', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_cropBtn');\n };\n ImageEditor.prototype.renderTransformBtn = function () {\n var _this = this;\n var items = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateLeft') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateLeft'), id: 'rotateleft', iconCss: 'e-icons e-anti-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('RotateRight') > -1)) {\n items.push({ text: this.l10n.getConstant('RotateRight'), id: 'rotateright', iconCss: 'e-icons e-clock-wise' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipHorizontal') > -1)) {\n items.push({ text: this.l10n.getConstant('HorizontalFlip'), id: 'horizontalflip', iconCss: 'e-icons e-horizontal-flip' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('FlipVertical') > -1)) {\n items.push({ text: this.l10n.getConstant('VerticalFlip'), id: 'verticalflip', iconCss: 'e-icons e-vertical-flip' });\n }\n var drpDownBtn = new DropDownButton({\n open: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n if (Browser.isDevice) {\n var ht = args.element.parentElement.offsetHeight;\n args.element.parentElement.style.display = 'none';\n args.element.parentElement.style.top = drpDownBtn.element.getBoundingClientRect().top -\n ht + 'px';\n args.element.parentElement.style.display = 'block';\n }\n },\n items: items, select: this.transformSelect.bind(this),\n iconCss: 'e-icons e-transform', cssClass: 'e-image-popup'\n });\n drpDownBtn.appendTo('#' + this.element.id + '_transformBtn');\n };\n ImageEditor.prototype.renderSaveBtn = function () {\n var _this = this;\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var saveItems = [\n { text: 'JPEG', id: 'jpeg' },\n { text: 'PNG', id: 'png' },\n { text: 'SVG', id: 'svg' }\n ];\n var ddbElem = document.getElementById(this.element.id + '_saveBtn');\n if (ddbElem) {\n // Initialize the DropDownButton component.\n var saveDrpDownBtn = new DropDownButton({ items: saveItems, cssClass: 'e-caret-hide e-image-popup', iconCss: 'e-icons e-save',\n select: function (args) {\n if (_this.togglePan) {\n _this.cancelPan();\n }\n imageEditorObj.export(args.item.text);\n }\n });\n saveDrpDownBtn.appendTo('#' + this.element.id + '_saveBtn');\n }\n };\n ImageEditor.prototype.cropSelect = function (args) {\n var text = args.item.id;\n this.select(text);\n this.refreshToolbar('main', true, true);\n };\n ImageEditor.prototype.transformSelect = function (args) {\n var text = args.item.id;\n switch (text) {\n case 'rotateleft':\n this.rotate(-90);\n break;\n case 'rotateright':\n this.rotate(90);\n break;\n case 'horizontalflip':\n this.flip('Horizontal');\n break;\n case 'verticalflip':\n this.flip('Vertical');\n break;\n }\n };\n ImageEditor.prototype.getShapesToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fillColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_fillcolor',\n cssClass: 'top-icon e-fill', tooltipText: this.l10n.getConstant('FillColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_fillColorBtn\"></button>' });\n }\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_strokecolor',\n cssClass: 'top-icon e-stroke', tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_borderColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ id: this.element.id + '_strokeWidth', cssClass: 'top-icon e-size', tooltipText: 'Stroke Width', align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_borderWidthBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initShapesToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getShapesToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createShapeColor(items);\n _this.createShapeBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'shapes' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createShapeColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fillColor') > -1) {\n this.element.querySelector('.e-template.e-fill').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_fill'\n }));\n var fillColor = new ColorPicker({\n modeSwitcher: false, noColor: true, value: '',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-fill-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.fillColor = args.currentValue.hex;\n proxy.strokeSettings.fillColor = proxy.activeObj.strokeSettings.fillColor;\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n if (args.currentValue.rgba === '') {\n fillDDB_1.element.children[0].classList.add('e-nocolor-item');\n }\n else {\n fillDDB_1.element.children[0].classList.remove('e-nocolor-item');\n fillDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n }\n fillDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_fill');\n var fillDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fillDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-fill-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fillColorBtn');\n fillColor.inline = true;\n this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview').classList.add('e-nocolor-item');\n }\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-stroke').appendChild(this.createElement('input', {\n id: this.element.id + '_shape_stroke'\n }));\n var strokeColor = new ColorPicker({\n modeSwitcher: false, noColor: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-shape-stroke-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], proxy.objColl, [], true), previousObj: objColl, factor: proxy.factor,\n sharpen: proxy.adjustmentLevel.sharpen, bw: proxy.adjustmentLevel.bw });\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_1.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_1.toggle();\n }\n }, '#' + this.element.id + '_shape_stroke');\n var strokeDDB_1 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-shape-stroke-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_borderColorBtn');\n strokeColor.inline = true;\n this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview').style.background = '#fff';\n }\n };\n ImageEditor.prototype.createShapeBtn = function (items) {\n var _this = this;\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n var ratio = this.calcRatio();\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_borderWidthBtn');\n var spanElem_1 = document.createElement('span');\n spanElem_1.innerHTML = this.l10n.getConstant('Small');\n spanElem_1.className = 'e-shape-stroke-width';\n strokeWidthBtn.appendChild(spanElem_1);\n // Initialize the DropDownButton component.\n var drpDownBtn_1 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_1.innerHTML;\n if (activeBtn !== '') {\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n }\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n var objColl = extend([], _this.objColl, [], true);\n _this.objColl.pop();\n spanElem_1.textContent = args.item.text;\n _this.activeObj.strokeSettings.strokeWidth = parseInt(args.item.id, 10);\n if (_this.lowerCanvas.width > _this.lowerCanvas.height) {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.width + ratio.height) / _this.factor);\n }\n else {\n _this.activeObj.strokeSettings.strokeWidth *= ((ratio.height + ratio.width) / _this.factor);\n }\n _this.strokeSettings.strokeWidth = _this.activeObj.strokeSettings.strokeWidth;\n _this.objColl.push(_this.activeObj);\n _this.undoRedoColl.push({ operation: 'shapeTransform', value: null,\n currentObj: extend([], _this.objColl, [], true), previousObj: objColl, factor: _this.factor,\n sharpen: _this.adjustmentLevel.sharpen, bw: _this.adjustmentLevel.bw });\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_5 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_5.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_6 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_6.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_1.appendTo('#' + this.element.id + '_borderWidthBtn');\n }\n };\n ImageEditor.prototype.getTextToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('fontFamily') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontFamily', cssClass: 'top-icon e-img-font-family',\n tooltipText: this.l10n.getConstant('FontFamily'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontFamilyBtn\"></button>' });\n }\n if (items.indexOf('fontStyle') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontStyle', cssClass: 'top-icon e-img-font-style',\n tooltipText: this.l10n.getConstant('FontStyle'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontStyleBtn\"></button>' });\n }\n if (items.indexOf('fontSize') > -1) {\n toolbarItems.push({ id: this.element.id + '_fontSize', cssClass: 'top-icon e-img-font-size',\n tooltipText: this.l10n.getConstant('FontSize'), align: 'Center',\n template: '<button id=\"' + this.element.id + '_fontSizeBtn\"></button>' });\n }\n if (items.indexOf('fontColor') > -1) {\n toolbarItems.push({ cssClass: 'top-icon e-text-font-color', id: this.element.id + '_text_strokecolor',\n tooltipText: this.l10n.getConstant('FontColor'), align: 'Center',\n type: 'Input', template: '<button id=\"' + this.element.id + '_fontColorBtn\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFontFamilyItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'arial', text: 'ABC' }, { id: 'calibri', text: 'ABC' }, { id: 'georgia', text: 'ABC' },\n { id: 'roboto', text: 'ABC' }, { id: 'tahoma', text: 'ABC' }];\n }\n return [{ id: 'arial', text: 'Arial' }, { id: 'calibri', text: 'Calibri' }, { id: 'georgia', text: 'Georgia' },\n { id: 'roboto', text: 'Roboto' }, { id: 'tahoma', text: 'Tahoma' }];\n };\n ImageEditor.prototype.getFontSizeItems = function () {\n if (Browser.isDevice) {\n return [{ id: 'default', text: this.l10n.getConstant('ABC') }, { id: 'bold', text: this.l10n.getConstant('ABC') },\n { id: 'italic', text: this.l10n.getConstant('ABC') }, { id: 'bolditalic', text: this.l10n.getConstant('ABC') }];\n }\n return [{ id: 'default', text: this.l10n.getConstant('Default') }, { id: 'bold', text: this.l10n.getConstant('Bold') },\n { id: 'italic', text: this.l10n.getConstant('Italic') }, { id: 'bolditalic', text: this.l10n.getConstant('BoldItalic') }];\n };\n ImageEditor.prototype.initTextToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getTextToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createTextColor(items);\n _this.createTextBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'text' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createTextColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('fontColor') > -1) {\n this.element.querySelector('.e-template.e-text-font-color').appendChild(this.createElement('input', {\n id: this.element.id + '_text_font'\n }));\n var fontColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-text-fontt-color',\n change: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n if (proxy.textBox.style.display === 'none') {\n proxy.strokeSettings.strokeColor = proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n }\n else if (proxy.textBox.style.display === 'block') {\n proxy.textBox.style.color = args.currentValue.hex;\n var temp = proxy.activeObj.strokeSettings.strokeColor;\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n proxy.activeObj.strokeSettings.strokeColor = temp;\n }\n else if (!proxy.togglePen) {\n _this.objColl.push(_this.activeObj);\n proxy.redrawShape(proxy.objColl[proxy.objColl.length - 1]);\n }\n strokeDDB_2.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_2.toggle();\n }\n }, '#' + this.element.id + '_text_font');\n var strokeDDB_2 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-text-fontt-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_fontColorBtn');\n fontColor.inline = true;\n this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.pushActItemIntoObj = function () {\n if (this.textBox.style.display === 'none') {\n this.objColl.push(this.activeObj);\n }\n else {\n var temp = extend({}, this.activeObj, {}, true);\n this.setTextBoxStylesToActObj();\n this.objColl.push(this.activeObj);\n this.activeObj = temp;\n }\n };\n ImageEditor.prototype.createTextBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n if (items.indexOf('fontFamily') > -1) {\n var fontNameBtn = document.getElementById(this.element.id + '_fontFamilyBtn');\n var spanElem_2 = document.createElement('span');\n if (Browser.isDevice) {\n spanElem_2.innerHTML = 'ABC';\n spanElem_2.setAttribute('style', 'font-family: arial');\n }\n else {\n spanElem_2.innerHTML = 'Arial';\n }\n spanElem_2.className = 'e-text-font-family';\n fontNameBtn.appendChild(spanElem_2);\n var fontFamilyBtn_1 = new DropDownButton({ items: this.getFontFamilyItems(),\n cssClass: 'e-font-family',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n args.element.setAttribute('style', 'font-family:' + args.element.id);\n },\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontFamilyBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var fontFamily;\n if (_this.textBox.style.display === 'block') {\n fontFamily = _this.textBox.style.fontFamily;\n }\n else {\n fontFamily = _this.activeObj.textSettings.fontFamily;\n }\n args.element.querySelector('[id *= ' + '\"' + fontFamily.toLowerCase()\n + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n spanElem_2.textContent = args.item.text;\n if (Browser.isDevice) {\n spanElem_2.setAttribute('style', 'font-family:' + args.item.id);\n }\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontFamily;\n _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n _this.upperContext.clearRect(0, 0, _this.upperCanvas.width, _this.upperCanvas.height);\n var width = _this.activeObj.activePoint.width +\n _this.activeObj.textSettings.fontSize * 0.25;\n _this.textBox.style.width = width / ratio.width + 'px';\n _this.textBox.style.fontFamily = _this.toPascalCase(args.item.id);\n _this.activeObj.textSettings.fontFamily = temp;\n _this.updateFontStyles();\n }\n else {\n _this.textSettings.fontFamily = _this.activeObj.textSettings.fontFamily = _this.toPascalCase(args.item.id);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontFamilyBtn_1.appendTo('#' + this.element.id + '_fontFamilyBtn');\n }\n if (items.indexOf('fontStyle') > -1) {\n var fontStyleBtnElem = document.getElementById(this.element.id + '_fontStyleBtn');\n var span1Elem_1 = document.createElement('span');\n if (Browser.isDevice) {\n span1Elem_1.innerHTML = this.l10n.getConstant('ABC');\n }\n else {\n span1Elem_1.innerHTML = this.l10n.getConstant('Default');\n }\n span1Elem_1.className = 'e-text-font-style';\n fontStyleBtnElem.appendChild(span1Elem_1);\n var fontStyleBtn_1 = new DropDownButton({ items: this.getFontSizeItems(),\n cssClass: 'e-font-style',\n createPopupOnClick: true,\n beforeItemRender: function (args) {\n if (Browser.isDevice) {\n if (args.element.id === 'bold') {\n args.element.setAttribute('style', 'font-weight: bold');\n }\n else if (args.element.id === 'italic') {\n args.element.setAttribute('style', 'font-style: italic');\n }\n else if (args.element.id === 'bolditalic') {\n args.element.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n }\n },\n open: function (args) {\n var fontStyle = 'default';\n if (_this.textBox.style.display === 'block') {\n if (_this.textBox.style.fontWeight === 'bold') {\n fontStyle = 'bold';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n else {\n if (_this.activeObj.textSettings.bold) {\n fontStyle = 'bold';\n }\n if (_this.activeObj.textSettings.italic) {\n fontStyle = fontStyle.replace('default', '');\n fontStyle += 'italic';\n }\n }\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontStyleBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n args.element.querySelector('[id *= ' + '\"' + fontStyle + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n if (Browser.isDevice) {\n if (args.item.id === 'bold') {\n span1Elem_1.setAttribute('style', 'font-weight: bold');\n }\n else if (args.item.id === 'italic') {\n span1Elem_1.setAttribute('style', 'font-style: italic');\n }\n else if (args.item.id === 'bolditalic') {\n span1Elem_1.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n _this.applyFontStyle(args.item.id, ratio);\n }\n else {\n span1Elem_1.textContent = args.item.text;\n _this.applyFontStyle(args.item.id, ratio);\n }\n }\n });\n fontStyleBtn_1.appendTo('#' + this.element.id + '_fontStyleBtn');\n }\n if (items.indexOf('fontSize') > -1) {\n var fontSizeBtnElem = document.getElementById(this.element.id + '_fontSizeBtn');\n var fontSizeSpanElem_1 = document.createElement('span');\n var fontSizes = this.getFontSizes();\n fontSizeSpanElem_1.innerHTML = fontSizes[0].text;\n fontSizeSpanElem_1.className = 'e-text-font-size';\n fontSizeBtnElem.appendChild(fontSizeSpanElem_1);\n var fontSizeBtn_1 = new DropDownButton({\n cssClass: 'e-font-size',\n items: fontSizes,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = fontSizeBtn_1.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = fontSizeSpanElem_1.innerHTML;\n args.element.querySelector('[aria-label *= ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n _this.pushActItemIntoObj();\n _this.objColl.pop();\n fontSizeSpanElem_1.textContent = args.item.text;\n if (_this.textBox.style.display === 'block') {\n var temp = _this.activeObj.textSettings.fontSize;\n _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.objColl.push(_this.activeObj);\n _this.objColl.pop();\n var textStyle = '';\n if (_this.textBox.style.fontWeight === 'bold') {\n textStyle = 'bold ';\n }\n if (_this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic ';\n }\n if (_this.textBox.style.fontWeight === 'bold' && _this.textBox.style.fontStyle === 'italic') {\n textStyle = 'italic bold ';\n }\n _this.upperContext.font = textStyle + _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.textBox.style.fontFamily;\n var rows = _this.textBox.value.split('\\n');\n var text = _this.getMaxText(true);\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n _this.textBox.style.width = width + 'px';\n _this.textBox.style.height = rows.length * (_this.activeObj.textSettings.fontSize + _this.activeObj.textSettings.fontSize * 0.25) + 'px';\n _this.activeObj.textSettings.fontSize = temp;\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n _this.textBox.style.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10) + 'px';\n if (_this.textBox.style.fontFamily === 'georgia') {\n _this.textBox.style.width = parseFloat(_this.textBox.style.width) + parseFloat(_this.textBox.style.fontSize) + 'px';\n }\n }\n else {\n _this.textSettings.fontSize = _this.activeObj.textSettings.fontSize = parseInt(_this.fontSizeColl[(parseInt(args.item.text, 10) - 1)].text, 10);\n _this.upperContext.font = _this.activeObj.textSettings.fontSize + 'px' + ' ' + _this.activeObj.textSettings.fontFamily;\n var rows = _this.activeObj.keyHistory.split('\\n');\n var text = _this.getMaxText();\n var width = _this.upperContext.measureText(text).width +\n _this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (_this.activeObj.textSettings.fontSize +\n _this.activeObj.textSettings.fontSize * 0.25);\n _this.setTextSelection(width, height);\n _this.updateActiveObject(ratio, _this.activeObj.activePoint, _this.activeObj);\n _this.redrawText(ratio);\n _this.objColl.push(_this.activeObj);\n _this.redrawShape(_this.objColl[_this.objColl.length - 1]);\n }\n }\n });\n fontSizeBtn_1.appendTo('#' + this.element.id + '_fontSizeBtn');\n }\n };\n ImageEditor.prototype.getFontSizes = function () {\n var items = [];\n this.fontSizeColl = [];\n var fontSize;\n if (this.degree === 0 || this.degree % 180 === 0) {\n fontSize = this.lowerCanvas.width / 20;\n }\n else {\n fontSize = this.lowerCanvas.height / 20;\n }\n for (var i = 1; i <= 10; i++) {\n this.fontSizeColl.push({ text: (i * (Math.round(fontSize / 2))).toString() });\n items.push({ text: (i.toString()) });\n }\n return items;\n };\n ImageEditor.prototype.getTextAreaWidth = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n return width;\n };\n ImageEditor.prototype.updateObjColl = function (item) {\n var tempBold = this.activeObj.textSettings.bold;\n var tempItalic = this.activeObj.textSettings.italic;\n switch (item) {\n case 'default':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = false;\n break;\n case 'bold':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = false;\n break;\n case 'italic':\n this.activeObj.textSettings.bold = false;\n this.activeObj.textSettings.italic = true;\n break;\n case 'bolditalic':\n this.activeObj.textSettings.bold = true;\n this.activeObj.textSettings.italic = true;\n break;\n }\n this.objColl.push(this.activeObj);\n this.objColl.pop();\n this.activeObj.textSettings.bold = tempBold;\n this.activeObj.textSettings.italic = tempItalic;\n };\n ImageEditor.prototype.applyFontStyle = function (item, ratio) {\n this.pushActItemIntoObj();\n this.objColl.pop();\n switch (item) {\n case 'default':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'bold':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'normal';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = false;\n this.redrawText(ratio);\n }\n break;\n case 'italic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'normal';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = false;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n case 'bolditalic':\n if (this.textBox.style.display === 'block') {\n var width = this.getTextAreaWidth(item) / ratio.width;\n this.textBox.style.width = width + 'px';\n this.textBox.style.fontWeight = 'bold';\n this.textBox.style.fontStyle = 'italic';\n this.updateObjColl(item);\n }\n else {\n this.textSettings.bold = this.activeObj.textSettings.bold = true;\n this.textSettings.italic = this.activeObj.textSettings.italic = true;\n this.redrawText(ratio);\n }\n break;\n }\n };\n ImageEditor.prototype.initZoomToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n this.defToolbarItems = leftItem.concat(zoomItem, rightItem);\n new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.renderSaveBtn();\n _this.trigger('toolbarCreated', { toolbarType: 'zoom' });\n }\n }, '#' + this.element.id + '_toolbar');\n this.createLeftToolbarControls();\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_7 = getComponent(this.element.id + '_toolbar', 'toolbar');\n toolbar_7.refreshOverflow();\n }\n };\n ImageEditor.prototype.contextualToolbarClicked = function (args) {\n var selEle = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selEle) {\n selEle.classList.remove('e-selected');\n }\n document.getElementById(args.item.id + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n this.currObjType.isFiltered = true;\n var type = args.item.id.replace(this.element.id, '').split('_')[1];\n var imageFiltering = { filter: this.toPascalCase(type) };\n this.trigger('imageFiltering', imageFiltering);\n this.setFilter(type.toLowerCase());\n this.currentFilter = args.item.id;\n };\n ImageEditor.prototype.defToolbarClicked = function (args) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n var zoomIn;\n var type = args.item.id.replace(this.element.id + '_', '').toLowerCase();\n var imageEditorObj = getInstance(document.getElementById(this.element.id), ImageEditor_1);\n var isCropSelection = false;\n var panBtn;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (!this.disabled) {\n switch (type) {\n case 'zoomin':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(.1);\n break;\n case 'zoomout':\n this.currObjType.isFiltered = false;\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.freeHandDraw(false);\n }\n imageEditorObj.zoom(-.1);\n break;\n case 'pan':\n this.currObjType.isCustomCrop = this.currObjType.isFiltered = false;\n if (isCropSelection) {\n this.currObjType.isCustomCrop = false;\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.refreshToolbar('main');\n }\n if (this.togglePan) {\n this.cancelPan();\n this.disablePan = true;\n }\n else {\n panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.add('e-selected-btn');\n imageEditorObj.pan(true);\n this.disablePan = false;\n }\n zoomIn = document.querySelector('#' + this.element.id + '_zoomIn');\n if (!isNullOrUndefined(zoomIn) && this.factor >= 8) {\n zoomIn.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomIn)) {\n zoomIn.classList.remove('e-disabled');\n }\n break;\n case 'cancel':\n if (this.textBox.style.display === 'block') {\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.textBox.style.transform = '';\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.lowerContext.filter = this.adjustmentValue = this.initialAdjustmentValue = this.tempAdjustmentValue;\n this.currentFilter = this.tempFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isFiltered = false;\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n this.adjustmentLevel = extend({}, this.tempAdjustmentLevel, {}, true);\n if (this.currentFilter === this.element.id + '_sharpen' || this.currentFilter === this.element.id + '_blackandwhite'\n || this.tempSharpenFilter || this.tempBWFilter) {\n if (this.currentFilter === this.element.id + '_sharpen' || this.tempSharpenFilter) {\n this.setSharpness(true);\n }\n else if (this.currentFilter === this.element.id + '_blackandwhite' || this.tempBWFilter) {\n this.setBlackAndWhiteFilter(true);\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n this.tempSharpenFilter = this.tempBWFilter = false;\n }\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n this.cancelItems();\n break;\n case 'ok':\n this.okBtn();\n break;\n case 'reset':\n imageEditorObj.reset();\n break;\n case 'adjustment':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('adjustment');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'brightness':\n case 'contrast':\n case 'hue':\n case 'saturation':\n case 'opacity':\n case 'blur':\n case 'exposure':\n this.unselectBtn();\n this.currObjType.isFiltered = true;\n this.refreshToolbar('color', null, null, null, type);\n document.getElementById(this.element.id + '_' + type).classList.add('e-selected-btn');\n break;\n case 'filter':\n this.upperCanvas.style.display = 'block';\n this.refreshToolbar('filter');\n this.lowerContext.filter = this.initialAdjustmentValue;\n this.tempAdjustmentValue = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.tempAdjustmentLevel = extend({}, this.adjustmentLevel, {}, true);\n this.tempFilter = this.currentFilter;\n this.tempSharpenFilter = this.adjustmentLevel.sharpen;\n this.tempBWFilter = this.adjustmentLevel.bw;\n break;\n case 'default':\n case 'chrome':\n case 'cold':\n case 'warm':\n case 'grayscale':\n case 'blackandwhite':\n case 'sepia':\n case 'invert':\n case 'sharpen':\n this.currObjType.isFiltered = true;\n this.setFilter(type);\n break;\n }\n }\n this.trigger('toolbarItemClicked', args);\n };\n ImageEditor.prototype.okBtn = function () {\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n var selElem = this.element.querySelector('.e-contextual-toolbar-wrapper .e-toolbar-item.e-selected');\n if (selElem) {\n this.currentFilter = selElem.children[0].children[0].id.replace('Canvas', '');\n }\n if (isCropSelection) {\n this.crop();\n }\n else if (this.togglePen) {\n this.freeHandDraw(false);\n }\n else if (this.textBox.style.display === 'block') {\n this.redrawActObj();\n }\n else if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_sliderWrapper')) ||\n this.currObjType.isFiltered) {\n this.initialAdjustmentValue = this.canvasFilter = this.lowerContext.filter;\n this.currObjType.isFiltered = false;\n }\n else {\n this.applyActObj();\n }\n this.callMainToolbar(false);\n };\n ImageEditor.prototype.unselectBtn = function () {\n if (document.querySelector('#' + this.element.id + '_brightness').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_brightness').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_contrast').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_contrast').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_hue').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_hue').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_saturation').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_saturation').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_opacity').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_opacity').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_blur').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_blur').classList.remove('e-selected-btn');\n }\n else if (document.querySelector('#' + this.element.id + '_exposure').classList.contains('e-selected-btn')) {\n document.querySelector('#' + this.element.id + '_exposure').classList.remove('e-selected-btn');\n }\n };\n ImageEditor.prototype.refreshSlider = function () {\n var sliderWrapper = document.querySelector('#' + this.element.id + '_sliderWrapper');\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var slider = document.querySelector('.e-slider');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n if (!isNullOrUndefined(sliderWrapper) && !isNullOrUndefined(slider)) {\n slider.ej2_instances[0].destroy();\n sliderWrapper.remove();\n }\n };\n ImageEditor.prototype.updateAdjustment = function (type, value, isPreview) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var values = [];\n var opacityValue;\n var brightnessValue;\n if (splitWords[4] !== undefined) {\n opacityValue = parseFloat(splitWords[4].split('(')[1]);\n }\n if (splitWords[0] !== undefined) {\n brightnessValue = parseFloat(splitWords[0].split('(')[1]);\n }\n var brightness = this.getFilterValue(this.adjustmentLevel.brightness);\n var saturation = this.getFilterValue(this.adjustmentLevel.saturation);\n if (type !== 'brightness' && type !== 'contrast' && type !== 'hue' && type !== 'saturation' && type !== 'exposure'\n && type !== 'opacity' && type !== 'blur') {\n if (isNullOrUndefined(isPreview) && (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw)) {\n if (this.adjustmentLevel.sharpen) {\n this.setSharpness(false);\n }\n else if (this.adjustmentLevel.bw) {\n this.setBlackAndWhiteFilter(false);\n }\n var temp_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp_1;\n }\n }\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n var saturate;\n var bright;\n var contrast;\n var saturatePercentage;\n var saturatePercent;\n var tempFilter;\n var temp;\n switch (type) {\n case 'brightness':\n if (splitWords[3].split) {\n if (parseFloat(splitWords[3].split('(')[1]) !== 100) {\n value += 0.1;\n }\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'contrast':\n splitWords[1] = 'contrast(' + value + '%)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'hue':\n splitWords[2] = 'hue-rotate(' + value + 'deg)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'saturation':\n splitWords[3] = 'saturate(' + value + '%)';\n if (saturation !== 1) {\n splitWords[0] = 'brightness(' + (brightnessValue + 0.1) + ')';\n }\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'opacity':\n if (parseFloat(splitWords[0].split('(')[1]) !== 1) {\n value -= 0.2;\n }\n splitWords[4] = 'opacity(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'blur':\n splitWords[5] = 'blur(' + value + 'px)';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'exposure':\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n }\n if (value > 1) {\n value -= 1;\n value += brightness;\n }\n else if (value < 1) {\n value = 1 - value;\n value = brightness - value;\n }\n splitWords[0] = 'brightness(' + value + ')';\n this.adjustmentValue = splitWords.join(' ');\n break;\n case 'chrome':\n saturate = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturate *= 100;\n value = saturate + (saturate * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'cold':\n // Adjusting Brightness\n bright = this.getFilterValue(this.adjustmentLevel.brightness);\n bright *= 100;\n value = bright * 0.9;\n splitWords[0] = 'brightness(' + value + '%)';\n // Adjusting Contrast\n contrast = this.getFilterValue(this.adjustmentLevel.contrast);\n contrast *= 100;\n value = contrast + (contrast * 0.5);\n splitWords[1] = 'contrast(' + value + '%)';\n // Adjusting Saturation\n saturatePercentage = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercentage *= 100;\n value = saturatePercentage;\n splitWords[3] = 'saturate(' + value + '%)';\n values = this.adjustmentValue.split(' ');\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'warm':\n saturatePercent = this.getSaturationFilterValue(this.adjustmentLevel.saturation);\n saturatePercent *= 100;\n value = saturatePercent + (saturatePercent * 0.4);\n splitWords[3] = 'saturate(' + value + '%)';\n splitWords[6] = 'sepia(25%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'grayscale':\n splitWords[7] = 'grayscale(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'blackandwhite':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setBlackAndWhiteFilter(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n }\n break;\n case 'sepia':\n splitWords[6] = 'sepia(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n break;\n case 'invert':\n splitWords[8] = 'invert(100%)';\n values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n break;\n case 'sharpen':\n values = this.adjustmentValue.split(' ');\n if (isPreview) {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n }\n else {\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.setSharpness(true);\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n }\n break;\n }\n if (type !== 'sharpen' && type !== 'blackandwhite') {\n if (isNullOrUndefined(isPreview)) {\n if (type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n this.lowerContext.filter = splitWords.join(' ');\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (brightness !== 1) {\n splitWords[4] = 'opacity(' + opacityValue + ')';\n }\n else if (saturation !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n if (type === 'exposure' && brightness !== 1) {\n splitWords[0] = 'brightness(' + brightnessValue + ')';\n }\n splitWords = this.setTempFilterValue(brightness, isPreview, splitWords, type);\n if (isNullOrUndefined(isPreview)) {\n this.lowerContext.filter = this.initialAdjustmentValue = splitWords.join(' ');\n }\n var tempFilter_1 = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter_1;\n if (brightness === 1) {\n this.isBrightnessAdjusted = false;\n }\n else {\n this.isBrightnessAdjusted = true;\n }\n }\n var filter = splitWords.join(' ');\n return filter;\n };\n ImageEditor.prototype.updateBrightnessFilter = function () {\n var splitWords = this.lowerContext.filter.split(' ');\n if (this.isBrightnessAdjusted && splitWords.length > 0 && !isNullOrUndefined(splitWords[4])) {\n var opacityValue = parseFloat(splitWords[4].split('(')[1]);\n splitWords[4] = 'opacity(' + (opacityValue - 0.3) + ')';\n this.lowerContext.filter = splitWords.join(' ');\n }\n };\n ImageEditor.prototype.autoEnablePan = function () {\n if (this.factor > 0.95 && this.factor < 1.05) {\n this.dragCanvas = this.togglePan = false;\n this.callMainToolbar(false, true);\n this.pan(false);\n this.disablePan = false;\n }\n else if (!this.disablePan) {\n this.pan(true);\n }\n else if (this.disablePan) {\n this.pan(false);\n }\n };\n ImageEditor.prototype.setTempFilterValue = function (brightness, isPreview, splitWords, type) {\n if (isPreview && brightness !== 1) {\n var tempSplitWords = this.lowerContext.filter.split(' ');\n tempSplitWords[4] = splitWords[4];\n this.lowerContext.filter = tempSplitWords.join(' ');\n }\n else if (isPreview && type === 'default') {\n splitWords = this.getDefaultFilter(splitWords);\n }\n return splitWords;\n };\n ImageEditor.prototype.getDefaultFilter = function (splitWords) {\n var values = this.adjustmentValue.split(' ');\n splitWords[0] = values[0];\n splitWords[1] = values[1];\n splitWords[2] = values[2];\n splitWords[3] = values[3];\n splitWords[4] = values[4];\n splitWords[5] = values[5];\n splitWords[6] = 'sepia(0%)';\n splitWords[7] = 'grayscale(0%)';\n splitWords[8] = 'invert(0%)';\n return splitWords;\n };\n ImageEditor.prototype.setAdjustment = function (type) {\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var splitWords = this.lowerContext.filter.split(' ');\n var value;\n var valueArr;\n switch (type) {\n case 'brightness':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.brightness = this.setFilterValue(value);\n break;\n case 'contrast':\n valueArr = splitWords[1].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.contrast = this.setFilterValue(value);\n break;\n case 'hue':\n valueArr = splitWords[2].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 3;\n this.adjustmentLevel.hue = value;\n break;\n case 'saturation':\n valueArr = splitWords[3].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value /= 100;\n this.adjustmentLevel.saturation = this.setSaturationFilterValue(value);\n break;\n case 'opacity':\n valueArr = splitWords[4].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n if (value === 0.45) {\n value = 40;\n }\n else if (value === 0.40) {\n value = 30;\n }\n else if (value === 0.35) {\n value = 20;\n }\n else if (value === 0.30) {\n value = 10;\n }\n else if (value === 0.25) {\n value = 0;\n }\n else {\n value *= 100;\n }\n this.adjustmentLevel.opacity = value;\n break;\n case 'blur':\n valueArr = splitWords[5].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n value *= 20;\n this.adjustmentLevel.blur = value;\n break;\n case 'exposure':\n valueArr = splitWords[0].split('(');\n value = parseFloat(valueArr[1].split(')')[0]);\n this.adjustmentLevel.exposure = this.setFilterValue(value);\n break;\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.renderSlider = function (type) {\n var _this = this;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_contextualToolbarArea');\n var hdrWrapper = document.querySelector('#' + this.element.id + '_headWrapper');\n var labelWrapper = document.querySelector('#' + this.element.id + '_labelWrapper');\n if (!hdrWrapper && !isNullOrUndefined(canvasWrapper)) {\n hdrWrapper = canvasWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_headWrapper',\n styles: 'position: relative'\n }));\n labelWrapper = hdrWrapper.appendChild(this.createElement('label', {\n id: this.element.id + '_labelWrapper',\n styles: Browser.isDevice ? 'position: absolute; top: 25%; left: calc(50% - 150px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n : 'position: absolute; top: 25%; left: calc(50% - 226px); font-size: 15px; text-transform: capitalize; font-weight: 400;'\n }));\n }\n else {\n hdrWrapper.style.display = 'block';\n }\n labelWrapper.textContent = this.l10n.getConstant(this.toPascalCase(type));\n var sliderWrapper = hdrWrapper.appendChild(this.createElement('div', {\n id: this.element.id + '_sliderWrapper',\n styles: 'position: absolute'\n }));\n var value = this.getCurrAdjustmentValue(type);\n var min;\n var max;\n var slider;\n if (type === 'brightness' || type === 'contrast' || type === 'saturation' || type === 'exposure') {\n if (this.finetuneSettings) {\n if (type === 'brightness' && this.finetuneSettings.brightness) {\n min = this.finetuneSettings.brightness.min;\n max = this.finetuneSettings.brightness.max;\n }\n else if (type === 'contrast' && this.finetuneSettings.contrast) {\n min = this.finetuneSettings.contrast.min;\n max = this.finetuneSettings.contrast.max;\n }\n else if (type === 'saturation' && this.finetuneSettings.saturation) {\n min = this.finetuneSettings.saturation.min;\n max = this.finetuneSettings.saturation.max;\n }\n else if (type === 'exposure' && this.finetuneSettings.exposure) {\n min = this.finetuneSettings.exposure.min;\n max = this.finetuneSettings.exposure.max;\n }\n else {\n min = -100;\n max = 100;\n }\n }\n else {\n min = -100;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n else if (type === 'hue' || type === 'blur' || type === 'opacity') {\n if (this.finetuneSettings) {\n if (type === 'hue' && this.finetuneSettings.hue) {\n min = this.finetuneSettings.hue.min;\n max = this.finetuneSettings.hue.max;\n }\n else if (type === 'blur' && this.finetuneSettings.blur) {\n min = this.finetuneSettings.blur.min;\n max = this.finetuneSettings.blur.max;\n }\n else if (type === 'opacity' && this.finetuneSettings.opacity) {\n min = this.finetuneSettings.opacity.min;\n max = this.finetuneSettings.opacity.max;\n }\n else {\n min = 0;\n max = 100;\n }\n }\n else {\n min = 0;\n max = 100;\n }\n slider = new Slider({\n value: value,\n tooltip: { isVisible: true, placement: 'Before', showOn: 'Always' },\n type: 'MinRange',\n min: min,\n max: max,\n step: 10,\n width: Browser.isDevice ? '200px' : '300px',\n cssClass: 'e-slider',\n change: function (args) {\n _this.setCurrAdjustmentValue(type, args.value);\n }\n });\n }\n slider.appendTo('#' + this.element.id + '_sliderWrapper');\n sliderWrapper.style.left = (parseFloat(canvasWrapper.style.width) - parseFloat(slider.width)) / 2 + 'px';\n };\n ImageEditor.prototype.getCurrAdjustmentValue = function (type) {\n var value;\n switch (type) {\n case 'brightness':\n value = this.adjustmentLevel.brightness;\n break;\n case 'contrast':\n value = this.adjustmentLevel.contrast;\n break;\n case 'hue':\n value = this.adjustmentLevel.hue;\n break;\n case 'saturation':\n value = this.adjustmentLevel.saturation;\n break;\n case 'opacity':\n value = this.adjustmentLevel.opacity;\n break;\n case 'blur':\n value = this.adjustmentLevel.blur;\n break;\n case 'exposure':\n value = this.adjustmentLevel.exposure;\n break;\n }\n return value;\n };\n ImageEditor.prototype.setCurrAdjustmentValue = function (type, value) {\n var fineTuneValueChanging = { finetune: this.toPascalCase(type), value: value };\n this.trigger('fineTuneValueChanging', fineTuneValueChanging);\n switch (type) {\n case 'brightness':\n this.setBrightness(value);\n break;\n case 'contrast':\n this.setContrast(value);\n break;\n case 'hue':\n this.setHue(value);\n break;\n case 'saturation':\n this.setSaturation(value);\n break;\n case 'opacity':\n this.setOpacity(value);\n break;\n case 'blur':\n this.setBlur(value);\n break;\n case 'exposure':\n this.setExposure(value);\n break;\n }\n };\n ImageEditor.prototype.cancelPan = function () {\n this.applyActObj();\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n panBtn.classList.remove('e-selected-btn');\n this.pan(false);\n };\n ImageEditor.prototype.callMainToolbar = function (isApplyBtn, isZooming) {\n this.refreshToolbar('main', isApplyBtn, false, isZooming);\n };\n ImageEditor.prototype.cancelItems = function () {\n var ratio = this.calcRatio();\n var isCropSelection = false;\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.togglePen) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.togglePen = false;\n this.upperCanvas.style.cursor = 'default';\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else if (this.activeObj.shape === 'text') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.activeObj.textSettings = this.tempTextSettings;\n if (this.activeObj.keyHistory === 'Enter Text' && this.activeObj.activePoint.startX === this.textStartPoints.x\n && this.activeObj.activePoint.startY === this.textStartPoints.y) {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawShapeText();\n }\n else {\n this.redrawText(ratio);\n this.redrawShape(this.activeObj);\n if (!isCropSelection && this.activeObj.topLeftCircle !== undefined) {\n this.applyActObj();\n }\n this.clearSelection();\n }\n this.tempTextSettings = { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n }\n else if (this.activeObj.shape === 'rectangle' || this.activeObj.shape === 'ellipse' || this.activeObj.shape === 'line') {\n this.activeObj.strokeSettings = this.tempStrokeSettings;\n this.redrawShape(this.activeObj);\n this.applyActObj();\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.isCustomCrop = false;\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.callMainToolbar();\n };\n ImageEditor.prototype.gradient = function (a, b) {\n return (b.y - a.y) / (b.x - a.x);\n };\n ImageEditor.prototype.applyPenDraw = function () {\n if (this.togglePen && this.factor === 1 && !this.currObjType.isZoomed) {\n this.apply();\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n }\n else {\n var tempCanvas = this.lowerCanvas.appendChild(this.createElement('canvas', {\n id: this.element.id + '_tempCanvas', attrs: { name: 'canvasImage' }\n }));\n var tempContext = tempCanvas.getContext('2d');\n tempCanvas.width = this.lowerCanvas.width;\n tempCanvas.height = this.lowerCanvas.height;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n tempContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n for (var i = 0; i < this.penDrawColl.length; i++) {\n tempContext.lineWidth = 2 * this.penDrawColl[i].strokeWidth;\n tempContext.strokeStyle = this.penDrawColl[i].strokeColor;\n var nexP = void 0;\n var preP = void 0;\n var f = 0.3;\n var t = 1;\n tempContext.beginPath();\n tempContext.moveTo(this.penDrawColl[i].points[0].x, this.penDrawColl[i].points[0].y);\n var m = 0;\n var dx1 = 0;\n var dx2 = 0;\n var dy1 = 0;\n var dy2 = 0;\n preP = this.penDrawColl[i].points[0];\n for (var j = 1; j < this.penDrawColl[i].points.length; j++) {\n var curP = this.penDrawColl[i].points[j];\n nexP = this.penDrawColl[i].points[j + 1];\n if (nexP) {\n m = this.gradient(preP, nexP);\n dx2 = (nexP.x - curP.x) * -f;\n dy2 = dx2 * m * t;\n }\n else {\n dx2 = 0;\n dy2 = 0;\n }\n tempContext.bezierCurveTo(preP.x - dx1, preP.y - dy1, curP.x + dx2, curP.y + dy2, curP.x, curP.y);\n dx1 = dx2;\n dy1 = dy2;\n preP = curP;\n if (this.penDrawColl[i].points.length > 2) {\n this.penDrawColl[i].points.shift();\n }\n tempContext.stroke();\n }\n }\n this.penDrawColl = [];\n this.imageEditorPointsColl = [];\n this.togglePen = false;\n var imgData = tempContext.getImageData(0, 0, tempCanvas.width, tempCanvas.height);\n var tempObj = void 0;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.currObjType.isZoomed = false;\n }\n };\n ImageEditor.prototype.redrawImgWithObj = function () {\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n ImageEditor.prototype.refreshToolbar = function (type, isApplyBtn, isCropping, isZooming, cType) {\n var args = { toolbarType: type };\n if (type !== 'filter' && type !== 'color') {\n if (document.getElementById(this.element.id + '_toolbar') && this.defToolbarItems.length > 0) {\n getComponent(document.getElementById(this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (document.getElementById(this.element.id + '_bottomToolbar') && this.defToolbarItems.length > 0) {\n if (document.getElementById(this.element.id + '_bottomToolbar').className.indexOf('e-control') > -1) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n }\n }\n this.refreshSlider();\n switch (type) {\n case 'main':\n if (Browser.isDevice) {\n if (isCropping) {\n this.initToolbarItem(false, true, true);\n }\n else {\n this.initToolbarItem(false, true);\n }\n }\n else if (!Browser.isDevice || isZooming) {\n this.initToolbarItem(isApplyBtn, Browser.isDevice);\n }\n if (Browser.isDevice) {\n this.initBottomToolbar();\n }\n break;\n case 'shapes':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n if (this.activeObj.shape === 'line') {\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n }\n else {\n args.toolbarItems = ['fillColor', 'strokeColor', 'strokeWidth'];\n }\n this.trigger('toolbarUpdating', args);\n this.initShapesToolbarItem(args.toolbarItems);\n break;\n case 'text':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['fontFamily', 'fontStyle', 'fontSize', 'fontColor'];\n this.trigger('toolbarUpdating', args);\n this.initTextToolbarItem(args.toolbarItems);\n break;\n case 'pen':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n args.toolbarItems = ['strokeColor', 'strokeWidth'];\n this.trigger('toolbarUpdating', args);\n this.initPenToolbarItem(args.toolbarItems);\n break;\n case 'pan':\n this.initZoomToolbarItem();\n break;\n case 'adjustment':\n if (Browser.isDevice) {\n this.initToolbarItem(false, true, true);\n }\n this.initAdjustmentToolbarItem();\n break;\n case 'filter':\n this.updateContextualToolbar(type);\n break;\n case 'color':\n this.updateContextualToolbar(type, cType);\n break;\n }\n };\n ImageEditor.prototype.getAdjustmentToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Brightness') > -1)) {\n toolbarItems.push({ id: this.element.id + '_brightness', prefixIcon: 'e-icons e-brightness', cssClass: 'top-icon e-brightness',\n tooltipText: this.l10n.getConstant('Brightness'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Contrast') > -1)) {\n toolbarItems.push({ id: this.element.id + '_contrast', prefixIcon: 'e-icons e-contrast', cssClass: 'top-icon e-contrast',\n tooltipText: this.l10n.getConstant('Contrast'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Hue') > -1)) {\n toolbarItems.push({ id: this.element.id + '_hue', prefixIcon: 'e-icons e-fade', cssClass: 'top-icon e-fade',\n tooltipText: this.l10n.getConstant('Hue'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Saturation') > -1)) {\n toolbarItems.push({ id: this.element.id + '_saturation', prefixIcon: 'e-icons e-saturation', cssClass: 'top-icon e-saturation',\n tooltipText: this.l10n.getConstant('Saturation'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Exposure') > -1)) {\n toolbarItems.push({ id: this.element.id + '_exposure', prefixIcon: 'e-icons e-grain', cssClass: 'top-icon e-grain',\n tooltipText: this.l10n.getConstant('Exposure'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Opacity') > -1)) {\n toolbarItems.push({ id: this.element.id + '_opacity', prefixIcon: 'e-icons e-opacity', cssClass: 'top-icon e-opacity',\n tooltipText: this.l10n.getConstant('Opacity'), align: 'Center' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Blur') > -1)) {\n toolbarItems.push({ id: this.element.id + '_blur', prefixIcon: 'e-icons e-tint', cssClass: 'top-icon e-tint',\n tooltipText: this.l10n.getConstant('Blur'), align: 'Center' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getFilterToolbarItem = function () {\n var toolbarItems = [];\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Default') > -1)) {\n toolbarItems.push({ id: this.element.id + '_default', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Default'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_defaultCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Default') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Chrome') > -1)) {\n toolbarItems.push({ id: this.element.id + '_chrome', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Chrome'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_chromeCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Chrome') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Cold') > -1)) {\n toolbarItems.push({ id: this.element.id + '_cold', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Cold'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_coldCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Cold') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Warm') > -1)) {\n toolbarItems.push({ id: this.element.id + '_warm', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Warm'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_warmCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Warm') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Grayscale') > -1)) {\n toolbarItems.push({ id: this.element.id + '_grayscale', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Grayscale'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_grayscaleCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Grayscale') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Sepia') > -1)) {\n toolbarItems.push({ id: this.element.id + '_sepia', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Sepia'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_sepiaCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Sepia') + '</span></div></div>' });\n }\n if (isNullOrUndefined(this.toolbar) || (!isNullOrUndefined(this.toolbar) && this.toolbar.indexOf('Invert') > -1)) {\n toolbarItems.push({ id: this.element.id + '_invert', prefixIcon: 'e-icons e-none', cssClass: 'top-icon e-none',\n tooltipText: this.l10n.getConstant('Invert'), align: 'Center',\n template: '<div class=\"filterwrapper\" style=\"box-sizing: content-box;\"><canvas id=' + this.element.id + '_invertCanvas' + '></canvas><div style=\"text-align:center;\"><span>' + this.l10n.getConstant('Invert') + '</span></div></div>' });\n }\n var tempToolbarItems = this.processToolbar('center');\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n return toolbarItems;\n };\n ImageEditor.prototype.getPenToolbarItem = function (items) {\n var toolbarItems = [];\n if (items.indexOf('strokeColor') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', id: this.element.id + '_pen_strokecolor',\n cssClass: 'top-icon e-pen-stroke-color',\n tooltipText: this.l10n.getConstant('StrokeColor'), align: 'Center', type: 'Input',\n template: '<button id=\"' + this.element.id + '_penColorBtn\"></button>' });\n }\n if (items.indexOf('strokeWidth') > -1) {\n toolbarItems.push({ prefixIcon: 'e-icons e-copy', cssClass: 'top-icon e-size',\n tooltipText: this.l10n.getConstant('StrokeWidth'),\n align: 'Center', type: 'Input', template: '<button id=\"' + this.element.id + '_penStrokeWidth\"></button>' });\n }\n var tempToolbarItems = this.processSubToolbar(items);\n for (var i = 0, len = tempToolbarItems.length; i < len; i++) {\n toolbarItems.push(tempToolbarItems[i]);\n }\n if (!Browser.isDevice) {\n toolbarItems.push({ id: this.element.id + '_ok', prefixIcon: 'e-icons e-check', cssClass: 'top-icon e-tick',\n tooltipText: this.l10n.getConstant('OK'), align: 'Right' });\n toolbarItems.push({ id: this.element.id + '_cancel', prefixIcon: 'e-icons e-close', cssClass: 'top-icon e-save',\n tooltipText: this.l10n.getConstant('Cancel'), align: 'Right' });\n }\n return toolbarItems;\n };\n ImageEditor.prototype.initPenToolbarItem = function (items) {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getPenToolbarItem(items);\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n _this.createPenColor(items);\n _this.createPenBtn(items);\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n _this.trigger('toolbarCreated', { toolbarType: 'pen' });\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.createPenColor = function (items) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (items.indexOf('strokeColor') > -1) {\n this.element.querySelector('.e-template.e-pen-stroke-color').appendChild(this.createElement('input', {\n id: this.element.id + '_pen_stroke'\n }));\n var penColor = new ColorPicker({\n modeSwitcher: false, value: '#fff',\n showButtons: false, mode: 'Palette', cssClass: 'e-pen-color',\n change: function (args) {\n proxy.activeObj.strokeSettings.strokeColor = args.currentValue.hex;\n if (!proxy.togglePen) {\n proxy.redrawShape(_this.activeObj);\n }\n strokeDDB_3.element.children[0].style.backgroundColor = args.currentValue.rgba;\n strokeDDB_3.toggle();\n }\n }, '#' + this.element.id + '_pen_stroke');\n var strokeDDB_3 = new DropDownButton({\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = strokeDDB_3.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n args.element.parentElement.style.left = _this.element.offsetLeft + 'px';\n }\n },\n target: '.e-pen-color',\n iconCss: 'e-dropdownbtn-preview'\n }, '#' + this.element.id + '_penColorBtn');\n penColor.inline = true;\n this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview').style.background\n = '#fff';\n }\n };\n ImageEditor.prototype.createPenBtn = function (items) {\n var _this = this;\n var ratio = this.calcRatio();\n var strokeWidthItems = [\n { id: '1', text: this.l10n.getConstant('XSmall') },\n { id: '2', text: this.l10n.getConstant('Small') },\n { id: '3', text: this.l10n.getConstant('Medium') },\n { id: '4', text: this.l10n.getConstant('Large') },\n { id: '5', text: this.l10n.getConstant('XLarge') }\n ];\n if (items.indexOf('strokeWidth') > -1) {\n var strokeWidthBtn = document.getElementById(this.element.id + '_penStrokeWidth');\n var spanElem_3 = document.createElement('span');\n if (isNullOrUndefined(this.penStrokeWidth)) {\n spanElem_3.innerHTML = this.l10n.getConstant('Small');\n }\n else {\n spanElem_3.innerHTML = this.getPenStroke(this.penStrokeWidth, this.calcRatio());\n }\n spanElem_3.className = 'e-pen-stroke-width';\n strokeWidthBtn.appendChild(spanElem_3);\n var drpDownBtn_2 = new DropDownButton({ items: strokeWidthItems,\n open: function (args) {\n if (Browser.isDevice) {\n args.element.parentElement.style.top = drpDownBtn_2.element.getBoundingClientRect().top -\n args.element.parentElement.offsetHeight + 'px';\n }\n var activeBtn = spanElem_3.innerHTML;\n args.element.querySelector('[aria-label = ' + '\"' + activeBtn + '\"' + ']').classList.add('e-selected-btn');\n },\n select: function (args) {\n spanElem_3.textContent = args.item.text;\n _this.setPenStroke(args.item.id, ratio);\n if (Browser.isDevice) {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_8 = getComponent(_this.element.id + '_bottomToolbar', 'toolbar');\n toolbar_8.refreshOverflow();\n }\n }\n else {\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_9 = getComponent(_this.element.id + '_toolbar', 'toolbar');\n toolbar_9.refreshOverflow();\n }\n }\n }\n });\n // Render initialized DropDownButton.\n drpDownBtn_2.appendTo('#' + this.element.id + '_penStrokeWidth');\n }\n };\n ImageEditor.prototype.setPenStroke = function (args, ratio) {\n switch (parseInt(args, 10)) {\n case 1:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.4;\n break;\n case 2:\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n break;\n case 3:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.2;\n break;\n case 4:\n this.penStrokeWidth = (ratio.width + ratio.height) * 1.6;\n break;\n case 5:\n this.penStrokeWidth = (ratio.width + ratio.height) * 2;\n break;\n }\n };\n ImageEditor.prototype.getPenStroke = function (value, ratio) {\n var textContent = '';\n if (Math.round(value / 0.4) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XSmall');\n }\n else if (Math.round(value / 0.8) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Small');\n }\n else if (Math.round(value / 1.2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Medium');\n }\n else if (Math.round(value / 1.6) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('Large');\n }\n else if (Math.round(value / 2) === Math.round(ratio.width + ratio.height)) {\n textContent = this.l10n.getConstant('XLarge');\n }\n return textContent;\n };\n ImageEditor.prototype.initAdjustmentToolbarItem = function () {\n var _this = this;\n var leftItem = this.getLeftToolbarItem();\n var rightItem = this.getRightToolbarItem();\n var mainItem = this.getAdjustmentToolbarItem();\n var zoomItem = this.getZoomToolbarItem();\n if (Browser.isDevice) {\n this.defToolbarItems = mainItem;\n }\n else {\n this.defToolbarItems = leftItem.concat(zoomItem, mainItem, rightItem);\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: this.defToolbarItems,\n clicked: this.defToolbarClicked.bind(this),\n created: function () {\n if (!Browser.isDevice) {\n _this.renderSaveBtn();\n }\n if (Browser.isDevice) {\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n else {\n _this.createLeftToolbarControls();\n if (_this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n toolbar.refreshOverflow();\n }\n }\n }\n });\n if (Browser.isDevice) {\n toolbar.appendTo('#' + this.element.id + '_bottomToolbar');\n }\n else {\n toolbar.appendTo('#' + this.element.id + '_toolbar');\n }\n };\n ImageEditor.prototype.initFilterToolbarItem = function () {\n var _this = this;\n var mainItem = this.getFilterToolbarItem();\n if (!isNullOrUndefined(document.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n document.querySelector('#' + this.element.id + '_contextualToolbar').classList.contains('e-control')) {\n getComponent(document.getElementById(this.element.id + '_contextualToolbar'), 'toolbar').destroy();\n }\n var toolbar = new Toolbar({\n width: '100%',\n items: mainItem,\n clicked: this.contextualToolbarClicked.bind(this),\n created: function () {\n _this.createCanvasFilter();\n if (_this.currentFilter === '') {\n _this.currentFilter = _this.element.id + '_default';\n }\n var hdrWrapper = document.querySelector('#' + _this.element.id + '_headWrapper');\n if (hdrWrapper) {\n hdrWrapper.style.display = 'none';\n }\n document.getElementById(_this.currentFilter + 'Canvas').parentElement.parentElement.classList.add('e-selected');\n toolbar.refreshOverflow();\n }\n });\n toolbar.appendTo('#' + this.element.id + '_contextualToolbar');\n };\n ImageEditor.prototype.createCanvasFilter = function () {\n if (this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n }\n var noFilter = document.querySelector('#' + this.element.id + '_defaultCanvas');\n noFilter.style.width = '100px';\n noFilter.style.height = '100px';\n noFilter.style.filter = this.updateAdjustment('default', null, true);\n var ctx = noFilter.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var chrome = document.querySelector('#' + this.element.id + '_chromeCanvas');\n chrome.style.width = '100px';\n chrome.style.height = '100px';\n chrome.style.filter = this.updateAdjustment('chrome', null, true);\n ctx = chrome.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var cold = document.querySelector('#' + this.element.id + '_coldCanvas');\n cold.style.width = '100px';\n cold.style.height = '100px';\n cold.style.filter = this.updateAdjustment('cold', null, true);\n ctx = cold.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var warm = document.querySelector('#' + this.element.id + '_warmCanvas');\n warm.style.width = '100px';\n warm.style.height = '100px';\n warm.style.filter = this.updateAdjustment('warm', null, true);\n ctx = warm.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var temp = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n var grayscale = document.querySelector('#' + this.element.id + '_grayscaleCanvas');\n grayscale.style.width = '100px';\n grayscale.style.height = '100px';\n grayscale.style.filter = this.updateAdjustment('grayscale', null, true);\n ctx = grayscale.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = tempFilter;\n var sepia = document.querySelector('#' + this.element.id + '_sepiaCanvas');\n sepia.style.width = '100px';\n sepia.style.height = '100px';\n sepia.style.filter = this.updateAdjustment('sepia', null, true);\n ctx = sepia.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n var invert = document.querySelector('#' + this.element.id + '_invertCanvas');\n invert.style.width = '100px';\n invert.style.height = '100px';\n invert.style.filter = this.updateAdjustment('invert', null, true);\n ctx = invert.getContext('2d');\n ctx.drawImage(this.inMemoryCanvas, 0, 0, 300, 150);\n };\n ImageEditor.prototype.updateCanvas = function () {\n var fileOpened = { fileName: this.imageFileName, fileType: this.imageFileType };\n this.lastX = this.baseImg.width / 2;\n this.lastY = this.baseImg.height / 2;\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n var toolbarHeight = 0;\n if (!isNullOrUndefined(this.toolbarTemplate) && !isNullOrUndefined(document.querySelector('.e-toolbar'))) {\n toolbarHeight = document.querySelector('.e-toolbar').clientHeight;\n maxDimension.width -= toolbarHeight;\n maxDimension.height -= toolbarHeight;\n }\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n if (!isNullOrUndefined(this.toolbarTemplate)) {\n this.lowerCanvas.style.left = parseFloat(this.lowerCanvas.style.left) + (toolbarHeight / 2) + 'px';\n }\n if (canvasWrapper) {\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (parseFloat(canvasWrapper.style.height) - maxDimension.height - 1) / 2 + 'px';\n }\n this.lowerContext.filter = tempFilter;\n if (this.lowerContext.filter === 'none' || this.lowerContext.filter === 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)' ||\n this.isInitialLoading) {\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.updateInMemoryCanvas('updateCanvas');\n if (this.canvasFilter !== 'none') {\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n }\n if (this.isInitialLoading) {\n this.initializeFilter();\n this.isInitialLoading = false;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.baseImg, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n else {\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n if (this.disabled) {\n this.element.setAttribute('class', 'e-disabled');\n }\n this.trigger('fileOpened', fileOpened);\n };\n ImageEditor.prototype.imageOnLoad = function (src) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n proxy.baseImg.src = proxy.baseImgSrc.id = src;\n this.baseImg.onload = function () {\n _this.lowerContext.drawImage(_this.baseImg, 0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n if (_this.togglePen) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n _this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy.element);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.togglePen = false;\n }, 'image/png');\n _this.inMemoryContext.clearRect(0, 0, _this.inMemoryCanvas.width, _this.inMemoryCanvas.height);\n var imgData = _this.lowerContext.getImageData(0, 0, _this.lowerCanvas.width, _this.lowerCanvas.height);\n _this.inMemoryContext.putImageData(imgData, 0, 0);\n var temp = _this.imgDataColl[0];\n _this.imgDataColl.splice(0, 1, { operation: 'freehanddraw', value: imgData });\n _this.imgDataColl.splice(1, 1, temp);\n }\n else {\n hideSpinner(_this.element);\n _this.element.style.opacity = '1';\n _this.updateCanvas();\n }\n if (Browser.isDevice) {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n if (!isNullOrUndefined(document.getElementById(_this.element.id + '_bottomToolbar')) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, Browser.isDevice);\n _this.createBottomToolbar();\n }\n else {\n if (_this.isToolbar() && (!isNullOrUndefined(document.getElementById(_this.element.id + '_toolbar'))) &&\n (!isNullOrUndefined(getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar')))) {\n getComponent(document.getElementById(_this.element.id + '_toolbar'), 'toolbar').destroy();\n }\n _this.initToolbarItem(false, false);\n }\n };\n };\n ImageEditor.prototype.refreshActiveObj = function () {\n this.activeObj = {};\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: 0, endY: 0, width: 0, height: 0 };\n this.activeObj.flipObjColl = [];\n this.activeObj.strokeSettings = this.strokeSettings;\n this.activeObj.textSettings = this.textSettings;\n };\n ImageEditor.prototype.redrawText = function (ratio) {\n if (this.activeObj.textSettings.bold) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.italic) {\n this.upperContext.font = 'bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n this.upperContext.font = 'italic bold ' + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n this.upperContext.font = this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n }\n var rows = this.activeObj.keyHistory.split('\\n');\n var text = this.textBox.style.display === 'block' ? this.getMaxText(true) : this.getMaxText();\n var width = this.upperContext.measureText(text).width + this.activeObj.textSettings.fontSize * 0.5;\n var height = rows.length * (this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25);\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.redrawShape(this.activeObj);\n };\n ImageEditor.prototype.setTextSelection = function (width, height) {\n var degree = this.degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree === 0) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.endX - width,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n }\n else if (degree === 90) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - width,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n }\n else if (degree === 180) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + width),\n endY: this.activeObj.activePoint.endY };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.startY };\n }\n else {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n }\n else if (degree === 270) {\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + height),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n else {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n }\n if (this.activeObj.flipObjColl.length === 0) {\n if (degree === 0) {\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.startX + (width ? width : 0)),\n endY: this.activeObj.activePoint.startY + (height ? height : 0) };\n }\n else if (degree === 90) {\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX - height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY,\n endX: (this.activeObj.activePoint.endX),\n endY: this.activeObj.activePoint.startY + (width ? width : 0) };\n }\n else if (degree === 180) {\n this.activeObj.activePoint = { endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY,\n startX: (this.activeObj.activePoint.endX - (width ? width : 0)),\n startY: this.activeObj.activePoint.endY - (height ? height : 0) };\n }\n else if (degree === 270) {\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + height;\n this.activeObj.activePoint = { startX: this.activeObj.activePoint.startX,\n startY: this.activeObj.activePoint.endY - (width ? width : 0),\n endX: this.activeObj.activePoint.endX,\n endY: this.activeObj.activePoint.endY };\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.fileSelect = function (inputElement, args) {\n this.imageFileName = inputElement.value.split('\\\\')[inputElement.value.split('\\\\').length - 1];\n this.imageFileName = this.imageFileName.split('.')[0];\n var fileType = inputElement.value.split('.');\n if (fileType[fileType.length - 1].toLowerCase() === 'jpg' || fileType[fileType.length - 1].toLowerCase() === 'jpeg') {\n this.imageFileType = 'Jpeg';\n }\n else if (fileType[fileType.length - 1].toLowerCase() === 'png') {\n this.imageFileType = 'Png';\n }\n else if (fileType[fileType.length - 1].toLowerCase() === 'svg') {\n this.imageFileType = 'Svg';\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var filesData = args.target.files[0];\n if (this.imgDataColl.length > 0) {\n this.imgDataColl = [];\n this.reset();\n }\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var URL = window.URL;\n var url = URL.createObjectURL(filesData);\n this.imageOnLoad(url.toString());\n inputElement.value = '';\n };\n ImageEditor.prototype.findTextPoint = function (e) {\n if (this.activeObj.shape === 'text') {\n this.textBox.style.transformOrigin = '0 0';\n var degree = void 0;\n var scale = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.flipObjColl.length > 0) {\n // need to add scale value according to length.\n for (var i = 0; i < this.activeObj.flipObjColl.length; i++) {\n if (degree !== 0 && degree % 90 === 0 && degree !== 180) {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(1, -1)' :\n 'scale(-1, 1)';\n }\n else {\n scale += this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal' ? 'scale(-1, 1)' :\n 'scale(1, -1)';\n }\n if (this.activeObj.flipObjColl[i].toLowerCase() === 'horizontal') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n else if (this.activeObj.flipObjColl[i].toLowerCase() === 'vertical') {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)' + scale;\n }\n }\n }\n else {\n this.textBox.style.transform = 'rotate(' + degree + 'deg)';\n }\n this.findTextTarget(e);\n }\n };\n ImageEditor.prototype.getStrokeWidth = function (text) {\n var strokeWidth;\n switch (text) {\n case '1':\n strokeWidth = this.l10n.getConstant('XSmall');\n break;\n case '2':\n strokeWidth = this.l10n.getConstant('Small');\n break;\n case '3':\n strokeWidth = this.l10n.getConstant('Medium');\n break;\n case '4':\n strokeWidth = this.l10n.getConstant('Large');\n break;\n case '5':\n strokeWidth = this.l10n.getConstant('XLarge');\n break;\n }\n return strokeWidth;\n };\n ImageEditor.prototype.updateToolbarItems = function (ratio) {\n var selFillElem = this.element.querySelector('.e-fill.e-template .e-dropdownbtn-preview');\n var selStrokeElem = this.element.querySelector('.e-stroke.e-template .e-dropdownbtn-preview');\n var selTextStrokeElem = this.element.querySelector('.e-text-font-color.e-template .e-dropdownbtn-preview');\n var selPenStrokeElem = this.element.querySelector('.e-pen-stroke-color.e-template .e-dropdownbtn-preview');\n var strokeWidthElem = this.element.querySelector('.e-shape-stroke-width');\n var fontFamilyElem = this.element.querySelector('.e-text-font-family');\n var fontSizeElem = this.element.querySelector('.e-text-font-size');\n var fontStyleElem = this.element.querySelector('.e-text-font-style');\n if (selFillElem) {\n if (this.activeObj.strokeSettings.fillColor === '') {\n selFillElem.classList.add('e-nocolor-item');\n }\n else {\n selFillElem.classList.remove('e-nocolor-item');\n selFillElem.style.background = this.activeObj.strokeSettings.fillColor;\n }\n getComponent(this.element.id + '_shape_fill', 'colorpicker').value\n = this.activeObj.strokeSettings.fillColor + 'ff';\n }\n if (selStrokeElem) {\n selStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_shape_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selTextStrokeElem) {\n selTextStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_text_font', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (selPenStrokeElem) {\n selPenStrokeElem.style.background = this.activeObj.strokeSettings.strokeColor;\n getComponent(this.element.id + '_pen_stroke', 'colorpicker').value\n = this.activeObj.strokeSettings.strokeColor + 'ff';\n }\n if (fontFamilyElem) {\n if (Browser.isDevice) {\n fontFamilyElem.setAttribute('style', 'font-family:' + this.activeObj.textSettings.fontFamily.toLowerCase());\n }\n else {\n fontFamilyElem.textContent = this.activeObj.textSettings.fontFamily;\n }\n }\n if (fontSizeElem) {\n for (var i = 0; i < this.fontSizeColl.length; i++) {\n if (parseInt(this.fontSizeColl[i].text, 10) >= this.activeObj.textSettings.fontSize) {\n fontSizeElem.textContent = (i + 1).toString();\n break;\n }\n }\n }\n if (fontStyleElem) {\n if (Browser.isDevice) {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', '');\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.setAttribute('style', 'font-style: italic;font-weight: bold');\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.setAttribute('style', 'font-weight: bold');\n }\n else {\n fontStyleElem.setAttribute('style', 'font-style: italic');\n }\n }\n else {\n if (!this.activeObj.textSettings.bold && !this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Default';\n }\n else if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n fontStyleElem.textContent = 'Bold Italic';\n }\n else if (this.activeObj.textSettings.bold) {\n fontStyleElem.textContent = 'Bold';\n }\n else {\n fontStyleElem.textContent = 'Italic';\n }\n }\n }\n if (strokeWidthElem) {\n var strokeWidth = Math.round((this.activeObj.strokeSettings.strokeWidth /\n (ratio.width + ratio.height)) * this.factor).toString();\n strokeWidthElem.textContent = this.getStrokeWidth(strokeWidth);\n }\n };\n ImageEditor.prototype.setTimer = function (e) {\n if (!this.isTimer && this.timer > 10) {\n this.findTextPoint(e);\n if (Browser.isDevice) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.targetTouches = function (touches) {\n var p1 = { x: touches[0].pageX, y: touches[0].pageY };\n var p2 = { x: touches[1].pageX, y: touches[1].pageY };\n var points = [p1, p2];\n return points;\n };\n ImageEditor.prototype.calculateScale = function (startTouches, endTouches) {\n var startDistance = this.getDistance(startTouches[0], startTouches[1]);\n var endDistance = this.getDistance(endTouches[0], endTouches[1]);\n return endDistance / startDistance;\n };\n ImageEditor.prototype.getDistance = function (a, b) {\n var x = a.x - b.x;\n var y = a.y - b.y;\n return Math.sqrt(x * x + y * y);\n };\n ImageEditor.prototype.touchStartHandler = function (e) {\n e.preventDefault();\n if (e.touches.length === 2) {\n this.isFirstMove = true;\n }\n else {\n this.timer = setTimeout(this.setTimer.bind(this), 1000, e);\n this.mouseDownEventHandler(e);\n }\n EventHandler.add(this.lowerCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.lowerCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n EventHandler.add(this.upperCanvas, 'touchend', this.mouseUpEventHandler, this);\n EventHandler.add(this.upperCanvas, 'touchmove', this.mouseMoveEventHandler, this); // Unbind mousedown to prevent double triggers from touch devices\n };\n ImageEditor.prototype.mouseDownEventHandler = function (e) {\n if (e.type === 'touchstart' && e.currentTarget === this.lowerCanvas && this.imgDataColl.length === 0) {\n return;\n }\n var ratio = this.calcRatio();\n if (this.dragCanvas) {\n this.canvasMouseDownHandler(e);\n }\n else {\n e.preventDefault();\n var x = void 0;\n var y = void 0;\n if (e.type === 'mousedown') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.redrawActObj(x, y);\n if ((!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_contextualToolbar')) &&\n !this.element.querySelector('#' + this.element.id + '_contextualToolbar').parentElement.classList.contains('e-hide')) ||\n (!isNullOrUndefined(this.element.querySelector('#' + this.element.id + '_headWrapper'))\n && !this.element.querySelector('#' + this.element.id + '_headWrapper').parentElement.classList.contains('e-hide'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n this.okBtn();\n this.refreshToolbar('main');\n }\n if (this.upperCanvas.style.cursor === 'crosshair' || (Browser.isDevice && this.togglePen)) {\n if (this.togglePen) {\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.penStrokeWidth)) {\n this.penStrokeWidth = (ratio.width + ratio.height) * 0.8;\n }\n if (this.activeObj.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4 &&\n this.strokeSettings.strokeWidth === (ratio.width + ratio.height) * 0.4) {\n this.activeObj.strokeSettings.strokeWidth = this.strokeSettings.strokeWidth =\n 2 * ((ratio.width + ratio.height) / this.factor);\n }\n this.minStrokeWidth = this.maxStrokeWidth = this.penStrokeWidth;\n this.velocity = 0.7;\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n this.mouseDownHandler(e, this.upperCanvas, this.pannStart, this.factor); // To call signature base\n }\n else {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n this.currObjType.isActiveObj = false;\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n }\n if ((this.upperCanvas.style.cursor !== 'crosshair' && e.type.toLowerCase() === 'touchstart') ||\n (this.currObjType.isActiveObj && this.upperCanvas.style.cursor !== 'default' && !this.togglePen)) {\n this.findTarget(x, y, e.type);\n }\n else if ((this.currObjType.shape === '' || this.currObjType.isCustomCrop) && !this.togglePen && this.upperCanvas.style.cursor !== 'default') {\n this.setActivePoint(x, y);\n }\n if (!isNullOrUndefined(this.activeObj)) {\n var isCropSelection = false;\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && (this.currObjType.isCustomCrop || this.togglePen)) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if ((this.activeObj.shape === 'rectangle') || (this.activeObj.shape === 'ellipse')\n || (this.activeObj.shape === 'line')) {\n this.refreshToolbar('shapes');\n }\n else if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (!isCropSelection) {\n this.callMainToolbar();\n }\n this.updateToolbarItems(ratio);\n }\n }\n };\n ImageEditor.prototype.mouseMoveEventHandler = function (e) {\n e.preventDefault();\n if (e.type === 'touchmove' && e.touches.length === 2) {\n if (this.isFirstMove) {\n this.startTouches = this.targetTouches(e.touches);\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n else {\n var ratio = this.calcRatio();\n var firstFingerX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n var firstFingerY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n var secondFingerX = e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft);\n var secondFingerY = e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop);\n this.lastX = firstFingerX > secondFingerX ? secondFingerX + (firstFingerX - secondFingerX) : firstFingerX +\n (secondFingerX - firstFingerX);\n this.lastY = firstFingerY > secondFingerY ? secondFingerY + (firstFingerY - secondFingerY) : firstFingerY +\n (secondFingerY - firstFingerY);\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n var scale = this.calculateScale(this.startTouches, this.targetTouches(e.touches));\n // Need to set lastX and lastY points\n if (this.tempTouches[0].x !== firstFingerX && this.tempTouches[0].y !== firstFingerY &&\n this.tempTouches[1].x !== secondFingerX && this.tempTouches[1].y !== secondFingerY) {\n if (scale > 1) {\n this.zoom(1.1);\n }\n else {\n this.zoom(-1.1);\n }\n this.tempTouches = [];\n this.tempTouches.push({ x: e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop) });\n this.tempTouches.push({ x: e.touches[1].clientX || (e.touches[1].pageX - this.lowerCanvas.offsetLeft),\n y: e.touches[1].clientY || (e.touches[1].pageY - this.lowerCanvas.offsetTop) });\n }\n }\n this.isFirstMove = false;\n return;\n }\n if (this.textBox.style.display === 'none') {\n this.isTimer = true;\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n this.canvasMouseMoveHandler(e);\n if (this.currObjType.isActiveObj && (this.activeObj.activePoint !== undefined || this.objColl.length > 0) &&\n !this.dragCanvas || this.activeObj.activePoint !== undefined) {\n if (this.dragElement === '') {\n this.setCursor(x, y);\n if (this.activeObj.activePoint.width === 0 && this.upperCanvas.style.cursor !== 'default' &&\n this.upperCanvas.style.cursor !== 'move' && this.upperCanvas.style.cursor !== 'crosshair'\n && this.upperCanvas.style.cursor !== 'grab') {\n this.upperCanvas.style.cursor = 'move';\n }\n this.findTarget(x, y, e.type);\n }\n }\n if (this.currObjType.isDragging) {\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var initialDraw = this.updateActivePoint(x, y);\n this.drawObject('duplicate', null, initialDraw);\n }\n };\n ImageEditor.prototype.mouseUpEventHandler = function (e) {\n e.preventDefault();\n var x;\n var y;\n if (e.type === 'mouseup') {\n x = e.clientX;\n y = e.clientY;\n }\n else {\n x = this.touchEndPoint.x;\n y = this.touchEndPoint.y;\n }\n if (e.type === 'touchend') {\n this.startTouches = this.tempTouches = [];\n this.isFirstMove = false;\n if (this.textBox.style.display === 'none') {\n this.isTimer = false;\n this.timer = 0;\n }\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (e.currentTarget === this.upperCanvas) {\n this.currObjType.shape = this.currObjType.shape.toLowerCase();\n if (!this.togglePen && !this.dragCanvas) {\n if (!isNullOrUndefined(this.tempObjColl) && this.activeObj.activePoint.width !== 0) {\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.tempObjColl = undefined;\n }\n this.applyCurrActObj(x, y);\n }\n else if (this.dragCanvas) {\n this.setPanPoints();\n }\n }\n if (this.togglePen && e.currentTarget === this.upperCanvas) {\n this.penDrawColl.push({ strokeWidth: this.penStrokeWidth, strokeColor: this.activeObj.strokeSettings.strokeColor, points: this.imageEditorPointsColl });\n this.imageEditorPointsColl = [];\n }\n else {\n this.currObjType.shape = '';\n }\n this.dragElement = '';\n this.currObjType.isInitialLine = this.currObjType.isDragging = false;\n this.oldPoint.x = undefined;\n this.oldPoint.y = undefined;\n };\n ImageEditor.prototype.keyDownEventHandler = function (e) {\n var _this = this;\n var shapeChangingArgs = {};\n var beforeSave = { fileName: 'ImageEditor', fileType: 'Png', cancel: false };\n switch (e.key) {\n case (e.ctrlKey && 's'):\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!beforeSave.cancel) {\n _this.export(observableSaveArgs.fileType, observableSaveArgs.fileName);\n }\n });\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case 'Delete':\n if (this.textBox.style.display === 'none') {\n shapeChangingArgs = { action: 'delete', previousShapeSettings: this.activeObj, currentShapeSettings: null };\n this.keyHistory = '';\n this.clearSelection();\n this.trigger('shapeChanging', shapeChangingArgs);\n this.refreshToolbar('main');\n }\n break;\n case 'Escape':\n if (this.togglePan) {\n this.refreshToolbar(this.currentToolbar);\n this.pan(false);\n }\n else {\n this.cancelItems();\n }\n break;\n case 'Enter':\n this.crop();\n break;\n default:\n if (Browser.isDevice && this.textBox.style.display === 'block') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n break;\n }\n };\n ImageEditor.prototype.keyUpEventHandler = function (e) {\n // eslint-disable-next-line\n if (this.textBox.style.display === 'block' && e.target.id === this.element.id + '_textBox') {\n setTimeout(this.textKeyDown.bind(this), 1, e);\n }\n };\n ImageEditor.prototype.canvasMouseDownHandler = function (e) {\n e.preventDefault();\n var ratio = this.calcRatio();\n if (e.type === 'mousedown') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.canvasMouseMoveHandler = function (e) {\n if (this.dragCanvas && this.factor > 1) {\n this.lowerCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n var ratio = this.calcRatio();\n if (e.type === 'mousemove') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n if (this.dragStart && this.dragCanvas) {\n this.drawPanImg();\n }\n };\n ImageEditor.prototype.canvasMouseUpHandler = function (e) {\n e.preventDefault();\n if (this.togglePan && e.currentTarget === this.lowerCanvas) {\n var ratio = this.calcRatio();\n if (e.type === 'mouseup') {\n this.lastX = e.offsetX || (e.pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.offsetY || (e.pageY - this.lowerCanvas.offsetTop);\n }\n else {\n this.lastX = e.touches[0].clientX || (e.touches[0].pageX - this.lowerCanvas.offsetLeft);\n this.lastY = e.touches[0].clientY || (e.touches[0].pageY - this.lowerCanvas.offsetTop);\n }\n this.lastX *= ratio.width;\n this.lastY *= ratio.height;\n this.setPanPoints();\n }\n this.dragStart = null;\n // zooms on mouse click point\n // if (e.currentTarget !== document) {\n // this.zoom(e.shiftKey ? -1 : 1 );\n // }\n this.currObjType.isDragging = false;\n };\n ImageEditor.prototype.setPanPoints = function () {\n if (this.dragCanvas || this.factor !== 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n this.dragStart = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n }\n };\n ImageEditor.prototype.textKeyDown = function (e) {\n if (String.fromCharCode(e.which) === '\\r') {\n this.textRow += 1;\n }\n this.textBox.setAttribute('rows', this.textRow.toString());\n this.textBox.style.height = 'auto';\n this.textBox.style.height = this.textBox.scrollHeight + 'px';\n this.setTextBoxWidth(e);\n if (Browser.isDevice) {\n this.textBox.style.width = parseFloat(this.textBox.style.width) + this.textBox.style.fontSize + 'px';\n }\n var rows = this.textBox.value.split('\\n');\n this.textRow = rows.length;\n this.textBox.setAttribute('rows', this.textRow.toString());\n };\n ImageEditor.prototype.adjustToScreen = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var tempFilter = this.lowerContext.filter;\n this.okBtn();\n this.applyActObj();\n this.refreshActiveObj();\n if (this.imgDataColl.length > 0) {\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n }\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (!isNullOrUndefined(canvasWrapper)) {\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n canvasWrapper.style.height = this.element.offsetHeight + 'px';\n if (Browser.isDevice) {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - (2 * this.toolbarHeight)) - 3 + 'px';\n }\n else {\n canvasWrapper.style.height = (parseFloat(canvasWrapper.style.height) - this.toolbarHeight) - 3 + 'px';\n }\n }\n this.redrawImg(tempFilter);\n if (!this.currObjType.isSave) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n proxy.lowerContext.filter = proxy.initialAdjustmentValue = proxy.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy.cssClass) {\n addClass([proxy.element], proxy.cssClass.split(' '));\n }\n proxy.lowerContext.clearRect(0, 0, proxy.lowerCanvas.width, proxy.lowerCanvas.height);\n proxy.lowerContext.drawImage(proxy.inMemoryCanvas, 0, 0);\n proxy.baseImg.src = URL.createObjectURL(blob);\n proxy.lowerContext.filter = tempFilter;\n }, 'image/png');\n }\n else {\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n }\n if (this.defToolbarItems.length > 0 && (!isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var toolbar_10 = getComponent(proxy.element.id + '_toolbar', 'toolbar');\n toolbar_10.refreshOverflow();\n if (!isNullOrUndefined(this.element.querySelector('.e-contextual-toolbar-wrapper'))) {\n this.element.querySelector('.e-contextual-toolbar-wrapper').classList.add('e-hide');\n }\n }\n };\n ImageEditor.prototype.screenOrientation = function () {\n if (Browser.isDevice) {\n this.isScreenOriented = true;\n setTimeout(this.adjustToScreen.bind(this), 100);\n }\n };\n ImageEditor.prototype.windowResizeHandler = function () {\n if (!Browser.isDevice) {\n this.adjustToScreen();\n }\n };\n ImageEditor.prototype.drawPanImg = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var transitionArgs = { startPoint: { x: this.dragStart.x, y: this.dragStart.y },\n endPoint: { x: pt.x, y: pt.y } };\n this.trigger('panning', transitionArgs);\n var xDiff = pt.x - this.dragStart.x;\n var yDiff = pt.y - this.dragStart.y;\n var xxDiff = xDiff;\n var yyDiff = yDiff;\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n if (xDiff >= 0) {\n if (pt1.x < 1) {\n xDiff = 0;\n }\n }\n else {\n if (pt2.x > this.lowerCanvas.width) {\n xDiff = 0;\n }\n }\n if (yDiff >= 0) {\n if (pt1.y < 1) {\n yDiff = 0;\n }\n }\n else {\n if (pt2.y > this.lowerCanvas.height) {\n yDiff = 0;\n }\n }\n this.lowerContext.translate(-xxDiff, -yyDiff);\n this.upperContext.translate(-xxDiff, -yyDiff);\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n this.redraw();\n };\n ImageEditor.prototype.redrawImg = function (tempFilter) {\n var wrapperWidth;\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n if (this.isScreenOriented) {\n wrapperWidth = parseFloat(canvasWrapper.style.width);\n }\n else {\n wrapperWidth = this.element.clientWidth;\n }\n var maxDimension = this.calcMaxDimension(this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerCanvas.width = this.upperCanvas.width = this.inMemoryCanvas.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.inMemoryCanvas.height;\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (wrapperWidth - maxDimension.width) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.offsetHeight - this.toolbarHeight - maxDimension.height) / 2 + 1 + 'px';\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n this.refreshActiveObj();\n }\n this.lowerContext.filter = temp;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.updateContext = function (ctx) {\n var _this = this;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var xform = new DOMMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n ctx.getTransform = function () {\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var savedTransforms = [];\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var save = ctx.save;\n ctx.save = function () {\n savedTransforms.push(xform.translate(0, 0));\n return save.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var restore = ctx.restore;\n ctx.restore = function () {\n xform = savedTransforms.pop();\n return restore.call(ctx);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var scale = ctx.scale;\n ctx.scale = function (sx, sy) {\n xform = _this.scaleNonUniform(xform, sx, sy);\n proxy.factor = xform.a;\n return scale.call(ctx, sx, sy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var rotate = ctx.rotate;\n ctx.rotate = function (radians) {\n xform = xform.rotate(radians * 180 / Math.PI);\n return rotate.call(ctx, radians);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var translate = ctx.translate;\n ctx.translate = function (dx, dy) {\n xform = xform.translate(dx, dy);\n return translate.call(ctx, dx, dy);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var transform = ctx.transform;\n ctx.transform = function (a, b, c, d, e, f) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var m2 = new DOMMatrix();\n m2.a = a;\n m2.b = b;\n m2.c = c;\n m2.d = d;\n m2.e = e;\n m2.f = f;\n xform = xform.multiply(m2);\n return transform.call(ctx, a, b, c, d, e, f);\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var setTransform = ctx.setTransform;\n ctx.setTransform = function (a, b, c, d, e, f) {\n xform.a = a;\n xform.b = b;\n xform.c = c;\n xform.d = d;\n xform.e = e;\n xform.f = f;\n return setTransform.call(ctx, a, b, c, d, e, f);\n };\n var pt = new DOMPoint();\n ctx.transformedPoint = function (x, y) {\n pt.x = x;\n pt.y = y;\n return pt.matrixTransform(xform.inverse());\n };\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.scaleNonUniform = function (xform, sx, sy) {\n xform.m11 *= sx;\n xform.m12 *= sx;\n xform.m13 *= sx;\n xform.m14 *= sx;\n xform.m21 *= sy;\n xform.m22 *= sy;\n xform.m23 *= sy;\n xform.m24 *= sy;\n return xform;\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.zoomImg = function (clicks) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt = this.lowerContext.transformedPoint(this.lastX, this.lastY);\n var scaleFactor = 1.1;\n var transitionArgs = { zoomPoint: { x: pt.x, y: pt.y }, zoomLevel: clicks };\n this.trigger('zooming', transitionArgs);\n this.lowerContext.translate(pt.x, pt.y);\n this.upperContext.translate(pt.x, pt.y);\n var factor = Math.pow(scaleFactor, clicks);\n this.factor += (factor - 1);\n this.lowerContext.scale(factor, factor);\n this.upperContext.scale(factor, factor);\n this.lowerContext.translate(-pt.x, -pt.y);\n this.upperContext.translate(-pt.x, -pt.y);\n var ratio = this.calcRatio();\n if (!isNullOrUndefined(this.strokeSettings.strokeWidth)) {\n this.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (this.factor > 0.99 && this.factor < 1.01) {\n this.factor = 1;\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n else {\n if (this.factor > 1) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var pt2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n var xDiff = pt.x;\n var yDiff = pt.y;\n if (pt1.x < 1) {\n xDiff = -xDiff;\n }\n else if (pt2.x > this.lowerCanvas.width) {\n xDiff = pt2.x - this.lowerCanvas.width;\n }\n if (pt1.y < 1) {\n yDiff = -yDiff;\n }\n else if (pt2.y > this.lowerCanvas.height) {\n yDiff = pt2.y - this.lowerCanvas.height;\n }\n if (xDiff !== pt.x || yDiff !== pt.y) {\n if (xDiff === pt.x) {\n xDiff = 0;\n }\n if (yDiff === pt.y) {\n yDiff = 0;\n }\n this.lowerContext.translate(xDiff, yDiff);\n this.upperContext.translate(xDiff, yDiff);\n }\n }\n this.redraw();\n }\n };\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.handleScroll = function (e) {\n var delta = e.wheelDelta ? e.wheelDelta / 40 : e.detail ? -e.detail : 0;\n if (delta) {\n this.zoom(delta);\n }\n return e.preventDefault() && false;\n };\n ImageEditor.prototype.redraw = function () {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p1 = this.lowerContext.transformedPoint(0, 0);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n var p2 = this.lowerContext.transformedPoint(this.lowerCanvas.width, this.lowerCanvas.height);\n this.pannStart.startX = p1.x;\n this.pannStart.startY = p1.y;\n this.pannEnd.startX = this.lowerCanvas.width - p2.x;\n this.pannEnd.startY = this.lowerCanvas.height - p2.y;\n this.lowerContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.upperContext.clearRect(p1.x, p1.y, p2.x - p1.x, p2.y - p1.y);\n this.lowerContext.save();\n this.upperContext.save();\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.restore();\n this.upperContext.restore();\n this.redrawImgWithObj();\n };\n ImageEditor.prototype.applyCurrActObj = function (x, y) {\n var isInside = false;\n var ratio = this.calcRatio();\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (isNullOrUndefined(actObj.activePoint)) {\n return;\n }\n if ((x >= Math.floor(actObj.activePoint.startX) && x <= Math.ceil(actObj.activePoint.endX) &&\n y >= Math.floor(actObj.activePoint.startY) && y <= Math.ceil(actObj.activePoint.endY)) ||\n (actObj.shape === 'text')) {\n isInside = true;\n }\n if (!isInside) {\n if (this.activeObj.horTopLine !== undefined && this.activeObj.horTopLine.startX !== 0 && this.activeObj.horTopLine.endX !== 0\n && !this.currObjType.isCustomCrop && this.currObjType.shape !== '') {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n if (this.activeObj.shape === 'text' || (this.currObjType.shape === 'ellipse' || this.currObjType.shape === 'rectangle' ||\n this.currObjType.shape === 'line')) {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n }\n this.lowerContext.filter = tempFilter;\n this.apply('shape');\n }\n }\n };\n ImageEditor.prototype.updateTextFromTextArea = function (ratio) {\n this.activeObj.keyHistory = this.textBox.value;\n this.textBox.style.display = 'none';\n this.textBox.value = '';\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.keyHistory).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var rows = this.activeObj.keyHistory.split('\\n');\n if (rows.length > 1) {\n height *= rows.length;\n var widthColl = [];\n for (var i = 0; i < rows.length; i++) {\n widthColl.push(this.upperContext.measureText(rows[i]).width +\n this.activeObj.textSettings.fontSize * 0.5);\n }\n width = Math.max.apply(Math, widthColl);\n }\n this.setTextSelection(width, height);\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n };\n ImageEditor.prototype.setTextBoxStylesToActObj = function () {\n var ratio = this.calcRatio();\n this.activeObj.textSettings.fontFamily = this.textBox.style.fontFamily;\n this.activeObj.strokeSettings.strokeColor = this.textBox.style.color;\n if (this.textBox.style.fontWeight === 'bold') {\n this.activeObj.textSettings.bold = true;\n }\n else {\n this.activeObj.textSettings.bold = false;\n }\n if (this.textBox.style.fontStyle === 'italic') {\n this.activeObj.textSettings.italic = true;\n }\n else {\n this.activeObj.textSettings.italic = false;\n }\n this.activeObj.textSettings.fontSize = (parseFloat(this.textBox.style.fontSize) * ((ratio.width + ratio.height) / 2)) / this.factor;\n };\n ImageEditor.prototype.redrawActObj = function (x, y) {\n var ratio = this.calcRatio();\n var splitWords;\n var bbox = this.upperCanvas.getBoundingClientRect();\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n if (this.textBox.style.display === 'block') {\n this.setTextBoxStylesToActObj();\n if (x && y) {\n x -= bbox.left;\n y -= bbox.top;\n if ((x !== this.activeObj.activePoint.startX / ratio.width) && (y !== this.activeObj.activePoint.startY /\n ratio.height)) {\n this.updateTextFromTextArea(ratio);\n this.applyActObj();\n }\n }\n else {\n this.updateTextFromTextArea(ratio);\n this.apply(this.activeObj.shape, this.activeObj);\n this.objColl.push(this.activeObj);\n this.refreshActiveObj();\n this.textBox.style.transform = '';\n this.refreshToolbar('main');\n }\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxPos = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left) -\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) - actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.setTextBoxPoints = function (actObj, degree, flip, x, y, ratio) {\n var point = { x: x, y: y };\n if (degree === 0) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left +\n actObj.activePoint.width / ratio.width);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left) + actObj.activePoint.width;\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 90) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top) +\n actObj.activePoint.height / ratio.height;\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top) + actObj.activePoint.height;\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 180) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left)\n + actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n else if (degree === 270) {\n if (actObj.flipObjColl[0].toLowerCase() === 'horizontal') {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n else {\n if (flip.toLowerCase() === 'horizontal') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.startX / ratio.width) + parseFloat(this.lowerCanvas.style.left) +\n actObj.activePoint.width / ratio.width;\n point.y = (actObj.activePoint.startY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.startX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.startY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n else if (flip.toLowerCase() === 'vertical') {\n if (this.factor === 1) {\n point.x = (actObj.activePoint.endX / ratio.width) + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY / ratio.height) + parseFloat(this.lowerCanvas.style.top);\n }\n else {\n point.x = (actObj.activePoint.endX - ((this.pannStart.startX) / ratio.width * this.factor))\n + parseFloat(this.lowerCanvas.style.left);\n point.y = (actObj.activePoint.endY - ((this.pannStart.startY) / ratio.height * this.factor))\n + parseFloat(this.lowerCanvas.style.top);\n }\n }\n }\n }\n return point;\n };\n ImageEditor.prototype.findTextTarget = function (e) {\n var x;\n var y;\n if (e.type === 'dblclick') {\n x = e.clientX;\n y = e.clientY;\n }\n else if (e.type === 'touchstart') {\n this.touchEndPoint.x = x = e.touches[0].clientX;\n this.touchEndPoint.y = y = e.touches[0].clientY;\n }\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n var degree;\n var flip = '';\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (this.activeObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n var temp;\n if (this.textBox.style.display === 'block') {\n x -= bbox.left;\n y -= bbox.top;\n }\n else {\n temp = extend({}, this.activeObj, {}, true);\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n }\n }\n this.lowerContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n this.activeObj = temp;\n this.updateFontStyles();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (actObj.flipObjColl.length === 4) {\n actObj.flipObjColl = [];\n flip = '';\n }\n if (flip === '' && actObj.flipObjColl.length > 1) {\n flip = actObj.flipObjColl[actObj.flipObjColl.length - 1];\n }\n if (actObj.flipObjColl.length <= 1) {\n var points = this.setTextBoxPos(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n else {\n var points = this.setTextBoxPoints(actObj, degree, flip, x, y, ratio);\n x = points.x;\n y = points.y;\n }\n this.textBox.style.display = 'block';\n this.textBox.style.left = x + 'px';\n this.textBox.style.top = y + 'px';\n this.textBox.style.fontFamily = actObj.textSettings.fontFamily;\n this.textBox.style.fontSize = actObj.textSettings.fontSize / ((ratio.width + ratio.height) / 2) * this.factor + 'px';\n this.textBox.style.color = actObj.strokeSettings.strokeColor;\n this.textBox.style.fontWeight = actObj.textSettings.bold ? 'bold' : 'normal';\n this.textBox.style.fontStyle = actObj.textSettings.italic ? 'italic' : 'normal';\n this.textBox.style.border = '2px solid ' + this.themeColl[this.theme]['primaryColor'];\n this.textBox.value = actObj.keyHistory;\n this.textBox.style.overflow = 'hidden';\n this.textBox.style.height = 'auto';\n if (degree % 90 === 0 && degree % 180 !== 0 && degree !== 0) {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.height / ratio.height) + 'px';\n this.textBox.style.height = (actObj.activePoint.width / ratio.width) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.height + 'px';\n this.textBox.style.height = actObj.activePoint.width + 'px';\n }\n }\n else {\n if (this.factor === 1) {\n this.textBox.style.width = (actObj.activePoint.width / ratio.width) + 'px';\n this.textBox.style.height = (actObj.activePoint.height / ratio.height) + 'px';\n }\n else {\n this.textBox.style.width = actObj.activePoint.width + 'px';\n this.textBox.style.height = actObj.activePoint.height + 'px';\n }\n }\n this.setTextBoxWidth();\n this.setTextBoxHeight();\n }\n else {\n this.applyActObj();\n }\n }\n };\n ImageEditor.prototype.setTextBoxHeight = function () {\n var ratio = this.calcRatio();\n var textBoxTop;\n var degree;\n var flip = '';\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if (degree === 0) {\n if (flip.toLowerCase() === 'vertical') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.lowerCanvas.style.maxHeight)\n - parseFloat(this.textBox.style.top))) + 'px';\n }\n else {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'vertical') {\n textBoxTop = parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top);\n this.textBox.style.maxHeight = (parseFloat(this.lowerCanvas.style.maxHeight) - textBoxTop) + 'px';\n }\n else {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top)) + 'px';\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'horizontal') {\n this.textBox.style.maxHeight = (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n else {\n this.textBox.style.maxHeight = parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left)) + 'px';\n }\n }\n this.textBox.style.maxHeight = ((parseFloat(this.textBox.style.maxHeight) - parseFloat(this.textBox.style.fontSize) * 0.5)) + 'px';\n };\n ImageEditor.prototype.setTextBoxWidth = function (e) {\n var ratio = this.calcRatio();\n var text = this.getMaxText(true);\n if (this.textBox.style.display === 'block') {\n this.updateFontStyles(true);\n }\n else {\n this.updateFontStyles();\n }\n var textBoxWidth = (this.upperContext.measureText(text).width + (parseFloat(this.textBox.style.fontSize) / 2));\n var letterWidth = e ? this.upperContext.measureText(String.fromCharCode(e.which)).width : 0;\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n var degree;\n var flip = '';\n if (actObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - actObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (actObj.shapeFlip === this.currFlipState) {\n flip = '';\n }\n else {\n flip = this.currFlipState;\n }\n if ((!isNullOrUndefined(e) && parseFloat(this.textBox.style.width) < (textBoxWidth + letterWidth)) || isNullOrUndefined(e)) {\n if (degree === 0) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 90) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 180) {\n if (flip.toLowerCase() === 'horizontal') {\n if ((parseFloat(this.lowerCanvas.style.maxWidth) - (parseFloat(this.textBox.style.left)\n - parseFloat(this.lowerCanvas.style.left))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.left) - parseFloat(this.lowerCanvas.style.left)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n else if (degree === 270) {\n if (flip.toLowerCase() === 'vertical') {\n if ((parseFloat(this.lowerCanvas.style.maxHeight) - (parseFloat(this.textBox.style.top)\n - parseFloat(this.lowerCanvas.style.top))) > (textBoxWidth + letterWidth)) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n else {\n if ((parseFloat(this.textBox.style.top) - parseFloat(this.lowerCanvas.style.top)) - textBoxWidth - letterWidth > 0) {\n this.textBox.style.width = (textBoxWidth + letterWidth) + 'px';\n }\n }\n }\n }\n };\n ImageEditor.prototype.setActivePoint = function (startX, startY) {\n if (isNullOrUndefined(this.activeObj.activePoint)) {\n return;\n }\n if (this.currObjType.isText) {\n var textWidth = startX ? startX : 0;\n var textHeight = startY ? startY : this.activeObj.textSettings.fontSize;\n if (this.activeObj.textSettings.fontSize === undefined) {\n this.activeObj.textSettings.fontSize = (Math.abs(this.baseImg.width - this.baseImg.height)) * 0.1;\n }\n this.setTextSelection(textWidth, textHeight);\n this.mouseDownPoint.x = this.activeObj.activePoint.endX;\n this.mouseDownPoint.y = this.activeObj.activePoint.endY;\n if (this.activeObj.horTopLine !== undefined) {\n this.activeObj.activePoint = extend({}, this.activeObj.activePoint, {}, true);\n }\n this.drawObject('duplicate');\n }\n else if (startX && startY) {\n this.activeObj.activePoint.startX = this.mouseDownPoint.x = startX;\n this.activeObj.activePoint.startY = this.mouseDownPoint.y = startY;\n this.currObjType.isDragging = true;\n }\n else {\n var selectInfo = this.activeObj;\n this.activeObj.activePoint = { startX: selectInfo.horTopLine.startX, startY: selectInfo.horTopLine.startY,\n endX: selectInfo.horTopLine.endX, endY: selectInfo.horTopLine.endY };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateActivePoint = function (x, y) {\n var initialDraw = false;\n var bbox = this.lowerCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.dragElement !== '') {\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = ((x - bbox.left) * ratio.width) / this.factor + this.pannStart.startX;\n y = ((y - bbox.top) * ratio.height) / this.factor + this.pannStart.startY;\n }\n }\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n var shapeResizingArgs = { action: 'resize', previousShapeSettings: this.activeObj };\n var shapeMovingArgs = { action: 'move', previousShapeSettings: this.activeObj };\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.updateNWPoints(x, y, maxDimension);\n break;\n case 'n-resize':\n this.updateNPoints(x, y);\n break;\n case 'ne-resize':\n this.updateNEPoints(x, y, maxDimension);\n break;\n case 'w-resize':\n this.updateWPoints(x, y);\n break;\n case 'e-resize':\n this.updateEPoints(x, y);\n break;\n case 'sw-resize':\n this.updateSWPoints(x, y, maxDimension);\n break;\n case 's-resize':\n this.updateSPoints(x, y);\n break;\n case 'se-resize':\n this.updateSEPoints(x, y, maxDimension);\n break;\n default:\n if (this.dragPoint.startX) {\n var width = (this.dragPoint.endX - this.previousPoint.x);\n var height = (this.dragPoint.endY - this.previousPoint.y);\n if (this.factor !== 1) {\n width = (width * ratio.width) / this.factor;\n height = (height * ratio.height) / this.factor;\n }\n this.activeObj.activePoint.startX += width;\n this.activeObj.activePoint.endX += width;\n this.activeObj.activePoint.startY += height;\n this.activeObj.activePoint.endY += height;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.activeObj.shape !== 'text' && !this.allowDrag) {\n if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x) && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startX < this.pannStart.startX ||\n this.activeObj.activePoint.endX > endPoint.x)) {\n this.activeObj.activePoint.startX -= width;\n this.activeObj.activePoint.endX -= width;\n }\n else if (this.factor > 1 && (this.activeObj.activePoint.startY < this.pannStart.startY ||\n this.activeObj.activePoint.endY > endPoint.y)) {\n this.activeObj.activePoint.startY -= height;\n this.activeObj.activePoint.endY -= height;\n }\n }\n if (this.activeObj.activePoint.startX >= this.pannStart.startX && this.activeObj.activePoint.startY >=\n this.pannStart.startY && this.activeObj.activePoint.endX <= endPoint.x && this.activeObj.activePoint.endY\n <= endPoint.y) {\n this.allowDrag = false;\n }\n }\n else {\n this.activeObj.activePoint.startX = x < this.mouseDownPoint.x ? x : this.mouseDownPoint.x;\n this.activeObj.activePoint.startY = y < this.mouseDownPoint.y ? y : this.mouseDownPoint.y;\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) * ratio.width;\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.startX = (this.activeObj.activePoint.startX - bbox.left) + ((this.pannStart.startX)\n / ratio.width * this.factor);\n this.activeObj.activePoint.startY = (this.activeObj.activePoint.startY - bbox.top) + ((this.pannStart.startY)\n / ratio.height * this.factor);\n initialDraw = true;\n }\n x = x < this.mouseDownPoint.x ? this.mouseDownPoint.x : x;\n y = y < this.mouseDownPoint.y ? this.mouseDownPoint.y : y;\n if (this.factor === 1) {\n this.activeObj.activePoint.endX = (x - bbox.left) * ratio.width;\n this.activeObj.activePoint.endY = (y - bbox.top) * ratio.height;\n initialDraw = false;\n }\n else {\n this.activeObj.activePoint.endX = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n this.activeObj.activePoint.endY = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n initialDraw = true;\n }\n }\n break;\n }\n shapeResizingArgs.currentShapeSettings = this.activeObj;\n shapeMovingArgs.currentShapeSettings = this.activeObj;\n this.trigger('shapeChanging', shapeMovingArgs);\n this.trigger('shapeChanging', shapeResizingArgs);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n return initialDraw;\n };\n ImageEditor.prototype.updateNWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'ne-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'sw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.startY < y) {\n width = x - this.activeObj.activePoint.startX;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateNPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 's-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateNEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = this.activeObj.activePoint.startY - y;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = this.oldPoint.y - y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.startY -= (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.startY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'nw-resize';\n }\n if (this.activeObj.activePoint.startY > this.activeObj.activePoint.endY) {\n var temp = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = temp;\n this.dragElement = 'se-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.startY < y) {\n width = this.activeObj.activePoint.endX - x;\n height = y - this.activeObj.activePoint.startY;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = this.activeObj.activePoint.startY - y;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.startY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.startY += newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateWPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'e-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateEPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'w-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSWPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = this.activeObj.activePoint.startX - x;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = this.oldPoint.x - x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x <= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.startX -= (maxDimension.width / 100) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 100) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.startX > this.activeObj.activePoint.endX) {\n var temp = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = temp;\n this.dragElement = 'se-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'nw-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.startX < x && this.activeObj.activePoint.endY > y) {\n width = x - this.activeObj.activePoint.startX;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = this.activeObj.activePoint.startX - x;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.startX -= newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.startX < 0 || this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.startX += newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.updateSPoints = function (x, y) {\n var width;\n var height;\n var scale;\n if (this.activeObj.shape !== 'text') {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endY = y;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'n-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.x;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n }\n };\n ImageEditor.prototype.updateSEPoints = function (x, y, maxDimension) {\n var diff;\n var width;\n var height;\n var scale;\n var percentage;\n var prevDiffX = this.diffPoint.x;\n var prevDiffY = this.diffPoint.y;\n if (this.activeObj.shape === 'text') {\n if (this.oldPoint.x === undefined && this.oldPoint.y === undefined) {\n this.diffPoint.x = x - this.activeObj.activePoint.endX;\n this.diffPoint.y = y - this.activeObj.activePoint.endY;\n }\n else {\n this.diffPoint.x = x - this.oldPoint.x;\n this.diffPoint.y = y - this.oldPoint.y;\n }\n this.oldPoint.x = x;\n this.oldPoint.y = y;\n if (this.diffPoint.x >= prevDiffX && this.diffPoint.y >= prevDiffY) {\n diff = Math.max(this.diffPoint.x, this.diffPoint.y);\n }\n else {\n diff = Math.min(this.diffPoint.x, this.diffPoint.y);\n }\n percentage = (diff / 10) * this.factor;\n this.activeObj.activePoint.endX += (maxDimension.width / 50) * percentage;\n this.activeObj.activePoint.endY += (maxDimension.height / 50) * percentage;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n var degree = void 0;\n var maxText = this.getMaxText();\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree === 180) {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.width / maxText.length) * 2;\n }\n else {\n this.activeObj.textSettings.fontSize = (this.activeObj.activePoint.height / maxText.length) * 2;\n }\n }\n else {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || (this.activeObj.shape !== undefined && splitWords[0] !== 'crop')) {\n this.activeObj.activePoint.endX = x;\n this.activeObj.activePoint.endY = y;\n if (this.activeObj.activePoint.endX < this.activeObj.activePoint.startX) {\n var temp = this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX;\n this.activeObj.activePoint.startX = temp;\n this.dragElement = 'sw-resize';\n }\n if (this.activeObj.activePoint.endY < this.activeObj.activePoint.startY) {\n var temp = this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY;\n this.activeObj.activePoint.startY = temp;\n this.dragElement = 'ne-resize';\n }\n }\n else {\n if (this.activeObj.activePoint.endX > x && this.activeObj.activePoint.endY > y) {\n width = this.activeObj.activePoint.endX - x;\n height = this.activeObj.activePoint.endY - y;\n scale = Math.min(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n }\n }\n else {\n width = x - this.activeObj.activePoint.endX;\n height = y - this.activeObj.activePoint.endY;\n scale = Math.max(width, height);\n var newScale = this.getScaleRatio(scale);\n this.activeObj.activePoint.endX += newScale.x;\n this.activeObj.activePoint.endY += newScale.y;\n if (this.activeObj.activePoint.endX > this.lowerCanvas.width || this.activeObj.activePoint.endY >\n this.lowerCanvas.height) {\n this.activeObj.activePoint.endX -= newScale.x;\n this.activeObj.activePoint.endY -= newScale.y;\n }\n }\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.getScaleRatio = function (scale) {\n var point = { x: scale, y: scale };\n if (!this.currObjType.isCustomCrop && this.activeObj.shape !== 'crop-circle' && this.activeObj.shape !== 'crop-square') {\n var ratio = this.activeObj.shape.split('-');\n ratio = ratio[1].split(':');\n var newScale = scale / (parseInt(ratio[1], 10));\n point.x = newScale * (parseInt(ratio[0], 10));\n point.y = newScale * (parseInt(ratio[1], 10));\n }\n return point;\n };\n ImageEditor.prototype.getMaxText = function (isTextBox) {\n var text = isTextBox ? this.textBox.value : this.activeObj.keyHistory;\n var maxi;\n var rows = text.split('\\n');\n var maxStr = rows[0].length;\n var maxText = rows[0];\n for (var i = 1; i < rows.length; i++) {\n maxi = rows[i].length;\n if (maxi > maxStr) {\n maxText = rows[i];\n maxStr = maxi;\n }\n }\n return maxText;\n };\n ImageEditor.prototype.setDragLimit = function () {\n if (this.factor === 1 && this.activeObj.activePoint !== undefined && this.activeObj.shape !== 'text') {\n if (this.activeObj.activePoint.startX < 0) {\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.width;\n }\n else if (this.activeObj.activePoint.endX > this.lowerCanvas.width) {\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.width;\n }\n if (this.activeObj.activePoint.startY < 0) {\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.height;\n }\n else if (this.activeObj.activePoint.endY > this.lowerCanvas.height) {\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.height;\n }\n }\n };\n ImageEditor.prototype.lineDraw = function (ratio) {\n if (this.activeObj.activePoint.height < 10 * ratio.height) {\n this.activeObj.activePoint.startY -= 10 * ratio.height;\n this.activeObj.activePoint.endY += 10 * ratio.height;\n this.activeObj.lineDraw = 'horizontal';\n }\n else if (this.activeObj.activePoint.width < 10 * ratio.width) {\n this.activeObj.activePoint.startX -= 10 * ratio.width;\n this.activeObj.activePoint.endX += 10 * ratio.width;\n this.activeObj.lineDraw = 'vertical';\n }\n else if (this.currObjType.isInitialLine) {\n this.activeObj.lineDraw = 'normal';\n this.currObjType.isInitialLine = false;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.shapeCircle = function (canvasDraw, selectionWidth, selectionHeight) {\n var ratio = this.calcRatio();\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.fillStyle = 'rgb(0, 0, 0, 0.5)';\n canvasDraw.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var tempWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (2 * (ratio.width + ratio.height)) / this.factor;\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.horTopLine.startX + (selectionWidth / 2), this.activeObj.horTopLine.startY\n + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n canvasDraw.stroke();\n canvasDraw.closePath();\n canvasDraw.save();\n canvasDraw.beginPath();\n canvasDraw.arc(((this.activeObj.activePoint.endX - this.activeObj.activePoint.startX) / 2) + this.activeObj.activePoint.startX, ((this.activeObj.activePoint.endY - this.activeObj.activePoint.startY) / 2) + this.activeObj.activePoint.startY, (this.activeObj.activePoint.width / 2), 0, Math.PI * 2);\n canvasDraw.closePath();\n canvasDraw.clip();\n canvasDraw.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n canvasDraw.restore();\n canvasDraw.lineWidth = tempWidth;\n this.drawOuterSelection(canvasDraw, null, true);\n this.currObjType.shape = '';\n };\n ImageEditor.prototype.drawOuterSelection = function (canvasDraw, isInitialDraw, isCropCircle) {\n var splitWords;\n var ratio = this.calcRatio();\n canvasDraw.lineWidth = (0.5 * (ratio.width + ratio.height)) / this.factor;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n var tempObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n if (isInitialDraw) {\n tempObj = this.getZoomShape(tempObj, ratio);\n }\n }\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (((splitWords !== undefined && splitWords[0] === 'crop') || this.activeObj.shape === undefined) && !isCropCircle) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n }\n canvasDraw.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n canvasDraw.fillStyle = this.themeColl[this.theme]['secondaryColor'];\n if (this.activeObj.shape !== 'rectangle') {\n canvasDraw.beginPath();\n canvasDraw.rect(tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height);\n canvasDraw.stroke();\n canvasDraw.closePath();\n }\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY);\n canvasDraw.arc(tempObj.topLeftCircle.startX, tempObj.topLeftCircle.startY, tempObj.topLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY);\n canvasDraw.arc(tempObj.topRightCircle.startX, tempObj.topRightCircle.startY, tempObj.topRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY);\n canvasDraw.arc(tempObj.bottomLeftCircle.startX, tempObj.bottomLeftCircle.startY, tempObj.bottomLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY);\n canvasDraw.arc(tempObj.bottomRightCircle.startX, tempObj.bottomRightCircle.startY, tempObj.bottomRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n if ((splitWords === undefined || splitWords[0] !== 'crop') && this.activeObj.shape !== 'text') {\n this.drawCenterCircles(canvasDraw);\n }\n this.activeObj = extend({}, tempObj, {}, true);\n };\n ImageEditor.prototype.getZoomShape = function (tempObj, ratio) {\n var obj = extend({}, tempObj, {}, true);\n obj.activePoint.startX = (obj.activePoint.startX / this.factor) * ratio.width;\n obj.activePoint.startY = (obj.activePoint.startY / this.factor) * ratio.height;\n obj.activePoint.endX = (obj.activePoint.endX / this.factor) * ratio.width;\n obj.activePoint.endY = (obj.activePoint.endY / this.factor) * ratio.height;\n obj.activePoint.width = obj.activePoint.endX - obj.activePoint.startX;\n obj.activePoint.height = obj.activePoint.endY - obj.activePoint.startY;\n this.updateActiveObject(ratio, obj.activePoint, obj);\n return obj;\n };\n ImageEditor.prototype.drawObject = function (canvas, obj, isInitialDraw, isCropRatio, points) {\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n this.setDragLimit();\n var ratio = this.calcRatio();\n if (this.currObjType.isLine && canvas !== 'original' && !obj) {\n this.lineDraw(ratio);\n }\n var splitWords = this.currObjType.shape.split('-');\n if (splitWords[0].toLowerCase() === 'crop' && isCropRatio) {\n this.drawCropRatio();\n }\n if (points) {\n this.activeObj.activePoint.startX = points.startX;\n this.activeObj.activePoint.startY = points.startY;\n this.activeObj.activePoint.endX = points.endX;\n this.activeObj.activePoint.endY = points.endY;\n this.activeObj.activePoint.width = points.width;\n this.activeObj.activePoint.height = points.height;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = 2 * (ratio.width + ratio.height) / this.factor;\n }\n if (obj) {\n this.activeObj = extend({}, obj, {}, true);\n if (this.factor !== 1) {\n this.updateActiveObject(ratio);\n }\n }\n else {\n this.updateActiveObject(ratio);\n }\n if (this.currObjType.isText) {\n this.activeObj.keyHistory = this.keyHistory;\n }\n if (canvas.toLowerCase() !== 'original') {\n var splitWords_1;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords_1 = this.activeObj.shape.split('-');\n if (splitWords_1[0] === 'crop') {\n isCrop = true;\n }\n }\n if (isCrop) {\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(this.activeObj.activePoint.startX + ratio.width, this.activeObj.activePoint.startY + ratio.height, this.activeObj.activePoint.width - ratio.width, this.activeObj.activePoint.height - ratio.height);\n }\n this.drawOuterSelection(canvasDraw, isInitialDraw);\n }\n this.currObjType.isActiveObj = true;\n if (obj) {\n this.drawShapeObj(canvas, obj.shape);\n }\n else if (this.keyHistory !== '' && this.currObjType.isText) {\n this.drawShapeObj(canvas, 'text');\n }\n else if (this.activeObj.shape) {\n this.drawShapeObj(canvas, this.activeObj.shape);\n }\n else {\n this.drawShapeObj(canvas, undefined);\n }\n };\n ImageEditor.prototype.updateActiveObject = function (ratio, actPoint, obj, isMouseMove) {\n actPoint = actPoint ? actPoint : extend({}, this.activeObj.activePoint, {}, true);\n obj = obj ? obj : extend({}, this.activeObj, {}, true);\n var horCircleWidth = actPoint.width / 2;\n var verCircleHeight = actPoint.height / 2;\n var radius = 7.5;\n obj.horTopLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.horBottomLine = { startX: actPoint.startX, startY: actPoint.endY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.verLeftLine = { startX: actPoint.startX, startY: actPoint.startY,\n endX: actPoint.startX, endY: actPoint.endY };\n obj.verRightLine = { startX: actPoint.endX, startY: actPoint.startY,\n endX: actPoint.endX, endY: actPoint.endY };\n obj.topLeftCircle = { startX: actPoint.startX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.topRightCircle = { startX: actPoint.endX, startY: actPoint.startY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerLeftCircle = { startX: actPoint.startX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.centerRightCircle = { startX: actPoint.endX, startY: actPoint.startY + verCircleHeight,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomLeftCircle = { startX: actPoint.startX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomCenterCircle = { startX: actPoint.startX + horCircleWidth, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.bottomRightCircle = { startX: actPoint.endX, startY: actPoint.endY,\n radius: obj.horTopLine.endX ? (radius * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor : 0 };\n obj.activePoint = actPoint;\n if (isNullOrUndefined(isMouseMove)) {\n this.activeObj = extend({}, obj, {}, true);\n }\n };\n ImageEditor.prototype.drawShapeObj = function (canvas, shape) {\n var currentShape = shape !== undefined ? shape : this.currObjType.shape;\n this.currObjType.shape = currentShape;\n var canvasDraw;\n if (canvas.toLowerCase() === 'original') {\n canvasDraw = this.lowerContext;\n }\n else {\n canvasDraw = this.upperContext;\n }\n if (this.currObjType.shape.toLowerCase() === 'rectangle' || this.currObjType.shape.toLowerCase() === 'ellipse'\n || this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.shape = this.currObjType.shape;\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n if (shape === 'text' || shape === 'freehanddraw') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n }\n else {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n }\n var horLineWidth = this.activeObj.activePoint.width / 3;\n var verLineHeight = this.activeObj.activePoint.height / 3;\n var selectionWidth = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n var selectionHeight = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'rectangle':\n this.drawSquareLines(canvasDraw);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'ellipse':\n canvasDraw.beginPath();\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), selectionWidth / 2, selectionHeight / 2, 0, 0, 2 * Math.PI, false);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.ellipse(this.activeObj.activePoint.startX + (selectionWidth / 2), this.activeObj.activePoint.startY + (selectionHeight / 2), (selectionWidth / 2) - (this.activeObj.strokeSettings.strokeWidth), (selectionHeight / 2) - (this.activeObj.strokeSettings.strokeWidth), 0, 0, 2 * Math.PI, false);\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'crop-circle':\n this.shapeCircle(canvasDraw, selectionWidth, selectionHeight);\n break;\n case 'line':\n this.shapeLine(canvasDraw, selectionWidth, selectionHeight);\n if (canvasDraw === this.upperContext) {\n this.drawOuterSelection(canvasDraw);\n }\n break;\n case 'text':\n this.shapeText(canvasDraw);\n break;\n case 'crop-square':\n case 'crop-3:4':\n case 'crop-4:3':\n case 'crop-6:9':\n case 'crop-9:6':\n case 'crop-9:16':\n case 'crop-16:9':\n this.drawSelection(horLineWidth, verLineHeight);\n this.currObjType.shape = '';\n break;\n default:\n this.drawSelection(horLineWidth, verLineHeight);\n break;\n }\n };\n ImageEditor.prototype.shapeLine = function (canvasDraw, selectionWidth, selectionHeight) {\n var startX;\n var startY;\n var endX;\n var endY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree === 0 || degree % 180 === 0) {\n startX = this.activeObj.activePoint.startX;\n startY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n endX = this.activeObj.activePoint.endX;\n endY = this.activeObj.activePoint.startY + (selectionHeight / 2);\n }\n else {\n startX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n startY = this.activeObj.activePoint.startY;\n endX = this.activeObj.activePoint.startX + (selectionWidth / 2);\n endY = this.activeObj.activePoint.endY;\n }\n var tempLineWidth = canvasDraw.lineWidth;\n canvasDraw.lineWidth = (this.activeObj.strokeSettings.strokeWidth) / Math.abs(this.factor);\n canvasDraw.beginPath();\n switch (this.activeObj.lineDraw.toLowerCase()) {\n case 'horizontal':\n case 'vertical':\n canvasDraw.moveTo(startX, startY);\n canvasDraw.lineTo(endX, endY);\n break;\n case 'normal':\n canvasDraw.moveTo(this.activeObj.horTopLine.startX, this.activeObj.horTopLine.startY);\n canvasDraw.lineTo(this.activeObj.horBottomLine.endX, this.activeObj.horBottomLine.endY);\n break;\n }\n canvasDraw.stroke();\n canvasDraw.lineWidth = tempLineWidth;\n };\n ImageEditor.prototype.shapeText = function (canvasDraw) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n var yPoint = ((i + 1) * this.activeObj.textSettings.fontSize * 0.85) + (i * lineHeight);\n if (this.degree === -360) {\n this.degree = 0;\n }\n if (this.degree === 0 || this.degree === 180) {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.height) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.height -\n (this.activeObj.activePoint.height * 0.1);\n }\n }\n else {\n if (this.activeObj.textSettings.fontSize > this.activeObj.activePoint.width) {\n this.activeObj.textSettings.fontSize = this.activeObj.activePoint.width -\n (this.activeObj.activePoint.width * 0.1);\n }\n }\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n canvasDraw.font = textStyle + this.activeObj.textSettings.fontSize + 'px' + ' ' + this.activeObj.textSettings.fontFamily;\n if (this.activeObj.flipObjColl.length === 4) {\n this.activeObj.flipObjColl = [];\n }\n for (var j = 0; j < this.activeObj.flipObjColl.length; j++) {\n if (this.activeObj.flipObjColl[j].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[j].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n if (this.activeObj.shapeDegree !== this.degree) {\n this.rotateText(canvasDraw);\n }\n else {\n canvasDraw.fillText(text, this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.1, this.activeObj.activePoint.startY + yPoint);\n }\n for (var k = 0; k < this.activeObj.flipObjColl.length; k++) {\n if (this.activeObj.flipObjColl[k].toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n this.updateActPoint('horizontal');\n }\n else if (this.activeObj.flipObjColl[k].toLowerCase() === 'vertical') {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n this.updateActPoint('vertical');\n }\n }\n }\n this.currObjType.isText = false;\n };\n ImageEditor.prototype.updateActPoint = function (degree) {\n var ratio = this.calcRatio();\n if (degree.toLowerCase() === 'horizontal') {\n if (this.activeObj.activePoint.startX <= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.activeObj.activePoint.endX);\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startX >= this.lowerCanvas.width / 2) {\n this.activeObj.activePoint.startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n else if (degree.toLowerCase() === 'vertical') {\n if (this.activeObj.activePoint.startY <= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.activeObj.activePoint.endY);\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n else if (this.activeObj.activePoint.startY >= this.lowerCanvas.height / 2) {\n this.activeObj.activePoint.startY = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n }\n }\n };\n ImageEditor.prototype.drawSquareLines = function (canvasDraw) {\n var splitWords;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords[0] === 'crop') {\n canvasDraw.strokeStyle = '#fff';\n }\n else {\n canvasDraw.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n }\n canvasDraw.beginPath();\n canvasDraw.rect(this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n if (this.activeObj.strokeSettings.fillColor !== '') {\n canvasDraw.fillStyle = this.activeObj.strokeSettings.fillColor;\n canvasDraw.fill();\n }\n canvasDraw.rect(this.activeObj.activePoint.startX + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.startY + this.activeObj.strokeSettings.strokeWidth, this.activeObj.activePoint.width - (2 * this.activeObj.strokeSettings.strokeWidth), this.activeObj.activePoint.height - (2 * this.activeObj.strokeSettings.strokeWidth));\n canvasDraw.fillStyle = this.activeObj.strokeSettings.strokeColor;\n canvasDraw.fill('evenodd');\n canvasDraw.closePath();\n };\n ImageEditor.prototype.drawSelection = function (horLineWidth, verLineHeight) {\n this.upperContext.strokeStyle = this.themeColl[this.theme]['primaryColor'];\n this.upperContext.beginPath();\n this.activeObj.horTopInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n verLineHeight, endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + verLineHeight };\n this.activeObj.horBottomInnerLine = { startX: this.activeObj.activePoint.startX, startY: this.activeObj.activePoint.startY +\n (2 * verLineHeight), endX: this.activeObj.activePoint.endX, endY: this.activeObj.activePoint.endY + (2 * verLineHeight) };\n this.activeObj.verLeftInnerLine = { startX: this.activeObj.activePoint.startX + horLineWidth,\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + horLineWidth,\n endY: this.activeObj.activePoint.endY };\n this.activeObj.verRightInnerLine = { startX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n startY: this.activeObj.activePoint.startY, endX: this.activeObj.activePoint.startX + (2 * horLineWidth),\n endY: this.activeObj.activePoint.endY };\n this.upperContext.moveTo(this.activeObj.horTopInnerLine.startX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horTopInnerLine.endX, this.activeObj.horTopInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.horBottomInnerLine.startX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.horBottomInnerLine.endX, this.activeObj.horBottomInnerLine.startY);\n this.upperContext.moveTo(this.activeObj.verLeftInnerLine.startX, this.activeObj.verLeftInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verLeftInnerLine.endX, this.activeObj.verLeftInnerLine.endY);\n this.upperContext.moveTo(this.activeObj.verRightInnerLine.startX, this.activeObj.verRightInnerLine.startY);\n this.upperContext.lineTo(this.activeObj.verRightInnerLine.endX, this.activeObj.verRightInnerLine.endY);\n this.upperContext.stroke();\n this.upperContext.closePath();\n };\n ImageEditor.prototype.drawCenterCircles = function (canvasDraw) {\n canvasDraw.lineWidth *= 2;\n canvasDraw.beginPath();\n canvasDraw.moveTo(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY);\n canvasDraw.arc(this.activeObj.topCenterCircle.startX, this.activeObj.topCenterCircle.startY, this.activeObj.topCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY);\n canvasDraw.arc(this.activeObj.centerLeftCircle.startX, this.activeObj.centerLeftCircle.startY, this.activeObj.centerLeftCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY);\n canvasDraw.arc(this.activeObj.centerRightCircle.startX, this.activeObj.centerRightCircle.startY, this.activeObj.centerRightCircle.radius, 0, 2 * Math.PI);\n canvasDraw.moveTo(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY);\n canvasDraw.arc(this.activeObj.bottomCenterCircle.startX, this.activeObj.bottomCenterCircle.startY, this.activeObj.bottomCenterCircle.radius, 0, 2 * Math.PI);\n canvasDraw.stroke();\n canvasDraw.fill();\n canvasDraw.closePath();\n canvasDraw.lineWidth /= 2;\n };\n ImageEditor.prototype.findTarget = function (x, y, type) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (type.toLowerCase() === 'mousedown' || type.toLowerCase() === 'touchstart') {\n var splitWords = void 0;\n var isCrop = false;\n if (this.activeObj.shape) {\n splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n isCrop = true;\n }\n }\n this.findTargetObj(x, y, ratio, isCrop);\n this.updateCursorStyles(x, y, ratio, type);\n }\n else {\n switch (this.dragElement.toLowerCase()) {\n case 'nw-resize':\n this.activeObj.topLeftCircle.startX = x;\n this.activeObj.topLeftCircle.startY = y;\n break;\n case 'n-resize':\n this.activeObj.topCenterCircle.startX = x;\n this.activeObj.topCenterCircle.startY = y;\n break;\n case 'ne-resize':\n this.activeObj.topRightCircle.startX = x;\n this.activeObj.topRightCircle.startY = y;\n break;\n case 'w-resize':\n this.activeObj.centerLeftCircle.startX = x;\n this.activeObj.centerLeftCircle.startY = y;\n break;\n case 'e-resize':\n this.activeObj.centerRightCircle.startX = x;\n this.activeObj.centerRightCircle.startY = y;\n break;\n case 'sw-resize':\n this.activeObj.bottomLeftCircle.startX = x;\n this.activeObj.bottomLeftCircle.startY = y;\n break;\n case 's-resize':\n this.activeObj.bottomCenterCircle.startX = x;\n this.activeObj.bottomCenterCircle.startY = y;\n break;\n case 'se-resize':\n this.activeObj.bottomRightCircle.startX = x;\n this.activeObj.bottomRightCircle.startY = y;\n break;\n default:\n if (this.dragPoint.startX && this.dragPoint.startY) {\n this.previousPoint.x = this.dragPoint.endX;\n this.previousPoint.y = this.dragPoint.endY;\n this.dragPoint.endX = x;\n this.dragPoint.endY = y;\n }\n break;\n }\n }\n };\n ImageEditor.prototype.findTargetObj = function (x, y, ratio, isCrop) {\n if (this.objColl.length !== 0 && !this.currObjType.isCustomCrop && !isCrop) {\n var diffX = 0;\n var i = void 0;\n for (var index = 0; index < this.objColl.length; index++) {\n var actObj = extend({}, this.objColl[index], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio);\n }\n if (x >= (actObj.activePoint.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.activePoint.endX + actObj.topLeftCircle.radius) &&\n y >= (actObj.activePoint.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.activePoint.endY + actObj.topLeftCircle.radius)) {\n if (diffX === 0 || diffX > x - actObj.activePoint.startX) {\n diffX = x - this.objColl[index].activePoint.startX;\n i = index;\n }\n }\n }\n if (isNullOrUndefined(i)) {\n this.refreshActiveObj();\n return;\n }\n this.tempObjColl = extend([], this.objColl, [], true);\n this.currObjType.isCustomCrop = false;\n var temp = this.activeObj = extend({}, this.objColl[i], {}, true);\n this.objColl.splice(i, 1);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n if (this.degree === 0) {\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n }\n else {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (this.flipState !== '') {\n if ((this.adjustmentLevel.sharpen || this.adjustmentLevel.bw) && !this.sharpenedImgData) {\n var data = void 0;\n var tempImageData = this.currImgData;\n if (this.adjustmentLevel.sharpen) {\n data = this.getSharpenData(this.currImgData);\n }\n else {\n data = this.getBlackAndWhiteData(tempImageData);\n }\n this.currImgData = data;\n this.sharpenedImgData = true;\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n this.setActivePoint();\n this.upperContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.activeObj = extend({}, temp, {}, true);\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (this.factor !== 1 && (this.activeObj.activePoint.startX < this.pannStart.startX || this.activeObj.activePoint.startY <\n this.pannStart.startY) || (this.activeObj.activePoint.endX > endPoint.x || this.activeObj.activePoint.endY > endPoint.y)) {\n this.allowDrag = true;\n }\n this.tempStrokeSettings = extend({}, this.activeObj.strokeSettings, {}, true);\n this.tempTextSettings = extend({}, this.activeObj.textSettings, {}, true);\n if (this.activeObj.shape === 'text' && this.activeObj.shapeFlip !== this.currFlipState) {\n this.activeObj.flippedText = true;\n }\n if (this.activeObj.activePoint) {\n this.drawObject('duplicate', this.activeObj);\n }\n var shapeChangingArgs = { action: 'select', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n }\n };\n ImageEditor.prototype.updateCursorStyles = function (x, y, ratio, type) {\n var isResize = false;\n if (this.activeObj.keyHistory !== '' && this.activeObj.shape === undefined && !this.currObjType.isCustomCrop &&\n !this.currObjType.isLine && this.currObjType.isText) {\n this.activeObj.shape = 'text';\n }\n var actObj = extend({}, this.activeObj, {}, true);\n if (isNullOrUndefined(actObj.topLeftCircle)) {\n return;\n }\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'nw-resize') {\n actObj.topLeftCircle.startX = actObj.topLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'nw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'n-resize') {\n actObj.topCenterCircle.startX = actObj.topCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 'n-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.topRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.topRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.topRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.topRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'ne-resize') {\n actObj.topRightCircle.startX = actObj.topRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'ne-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'w-resize') {\n actObj.centerLeftCircle.startX = actObj.centerLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'w-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.centerRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.centerRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.centerRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.centerRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'e-resize') {\n actObj.centerRightCircle.startX = actObj.centerRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'e-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomLeftCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomLeftCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomLeftCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'sw-resize') {\n actObj.bottomLeftCircle.startX = actObj.bottomLeftCircle.startY = 0;\n this.upperCanvas.style.cursor = 'sw-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomCenterCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomCenterCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomCenterCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 's-resize') {\n actObj.bottomCenterCircle.startX = actObj.bottomCenterCircle.startY = 0;\n this.upperCanvas.style.cursor = 's-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else if (x >= (actObj.bottomRightCircle.startX - actObj.topLeftCircle.radius) &&\n x <= (actObj.bottomRightCircle.startX + actObj.topLeftCircle.radius) &&\n y >= (actObj.bottomRightCircle.startY - actObj.topLeftCircle.radius) &&\n y <= (actObj.bottomRightCircle.startY + actObj.topLeftCircle.radius) && this.dragElement !== 'se-resize') {\n actObj.bottomRightCircle.startX = actObj.bottomRightCircle.startY = 0;\n this.upperCanvas.style.cursor = 'se-resize';\n isResize = true;\n this.dragElement = this.upperCanvas.style.cursor;\n }\n else {\n this.dragPoint.startX = this.previousPoint.x = this.dragPoint.endX = x;\n this.dragPoint.startY = this.previousPoint.y = this.dragPoint.endY = y;\n }\n this.previousPoint.x = this.previousPoint.y = this.diffPoint.x = this.diffPoint.y = 0;\n if (type === 'touchstart') {\n if (isResize || (x >= actObj.activePoint.startX && x <= actObj.activePoint.endX\n && y >= actObj.activePoint.startY && y <= actObj.activePoint.endY)) {\n this.currObjType.isDragging = true;\n }\n }\n else {\n this.currObjType.isDragging = true;\n }\n };\n ImageEditor.prototype.drawCropRatio = function () {\n var x;\n var y;\n switch (this.currObjType.shape.toLowerCase()) {\n case 'crop-square':\n case 'crop-circle':\n this.setDragDirection();\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.activeObj.activePoint.width = this.activeObj.activePoint.height;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n }\n else {\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n break;\n case 'crop-3:2':\n x = 3;\n y = 2;\n break;\n case 'crop-4:3':\n x = 4;\n y = 3;\n break;\n case 'crop-5:4':\n x = 5;\n y = 4;\n break;\n case 'crop-7:5':\n x = 7;\n y = 5;\n break;\n case 'crop-16:9':\n x = 16;\n y = 9;\n break;\n }\n if (x !== undefined && y !== undefined) {\n this.calcShapeRatio(x, y);\n }\n };\n ImageEditor.prototype.setDragDirection = function () {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = this.dragPoint.startX = ((this.lowerCanvas.width / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.startY = this.dragPoint.startY = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.height / 2))\n + arcRadius;\n this.activeObj.activePoint.endX = ((this.lowerCanvas.width / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.height / 2)) - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2;\n this.activeObj.activePoint.startX = (centerX - centerY) + arcRadius;\n this.activeObj.activePoint.startY = (this.pannStart.startY) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleHeight) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleHeight) - (2 * arcRadius);\n }\n }\n else {\n if (this.factor === 1) {\n this.activeObj.activePoint.startY = this.dragPoint.startX = ((this.lowerCanvas.height / 2) - (this.lowerCanvas.width) / 2)\n + arcRadius;\n this.activeObj.activePoint.endY = ((this.lowerCanvas.height / 2) + (this.lowerCanvas.width) / 2) - arcRadius;\n this.activeObj.activePoint.startX = this.dragPoint.startX = arcRadius;\n this.activeObj.activePoint.endX = this.lowerCanvas.width - arcRadius;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = this.dragPoint.startX = visibleWidth / 2;\n var centerY = (this.dragPoint.startY = visibleHeight / 2) + this.pannStart.startY;\n this.activeObj.activePoint.startX = this.pannStart.startX + arcRadius;\n this.activeObj.activePoint.startY = (centerY - centerX) + arcRadius;\n this.activeObj.activePoint.endX = (this.activeObj.activePoint.startX + visibleWidth) - arcRadius;\n this.activeObj.activePoint.endY = (this.activeObj.activePoint.startY + visibleWidth) - arcRadius;\n }\n }\n };\n ImageEditor.prototype.calcShapeRatio = function (x, y) {\n var ratio = this.calcRatio();\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var originalWidth = this.factor === 1 ? this.lowerCanvas.width : this.lowerCanvas.width / this.factor;\n var originalHeight = this.factor === 1 ? this.lowerCanvas.height : this.lowerCanvas.height / this.factor;\n var presetRatio = x / y;\n var standardSize = originalWidth >= originalHeight ? originalWidth : originalHeight;\n var width = standardSize * presetRatio;\n var height = standardSize;\n var scaleWidth = this.getScale(width, originalWidth);\n var snippetArray = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray.push(width * scaleWidth);\n }\n else {\n snippetArray.push(height * scaleWidth);\n }\n }\n width = snippetArray[0];\n height = snippetArray[1];\n var scaleHeight = this.getScale(height, originalHeight);\n var snippetArray1 = [];\n for (var i = 0; i < 2; i++) {\n if (i === 0) {\n snippetArray1.push(width * scaleHeight);\n }\n else {\n snippetArray1.push(height * scaleHeight);\n }\n }\n width = snippetArray1[0];\n height = snippetArray1[1];\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n this.activeObj.activePoint.startX = (this.dragPoint.startX = (originalWidth - width) / 2) + arcRadius;\n this.activeObj.activePoint.startY = (this.dragPoint.startY = (originalHeight - height) / 2) + arcRadius;\n this.activeObj.activePoint.endX = ((originalWidth - width) / 2 + width) - arcRadius;\n this.activeObj.activePoint.endY = ((originalHeight - height) / 2 + height) - arcRadius;\n if (this.factor !== 1) {\n this.activeObj.activePoint.startX += this.pannStart.startX;\n this.activeObj.activePoint.startY += this.pannStart.startY;\n this.activeObj.activePoint.endX += this.pannStart.startX;\n this.activeObj.activePoint.endY += this.pannStart.startY;\n }\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n };\n ImageEditor.prototype.getScale = function (value, originalValue) {\n return value > originalValue ? originalValue / value : 1;\n };\n ImageEditor.prototype.calcRatio = function () {\n var widthRatio;\n var heightRatio;\n if (this.degree === 0 || this.degree % 180 === 0) {\n widthRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n widthRatio = this.baseImg.height / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.baseImg.width / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n return { width: widthRatio, height: heightRatio };\n };\n ImageEditor.prototype.calcMaxDimension = function (width, height) {\n var canvasMaxWidth = this.element.clientWidth;\n var canvasMaxHeight = this.element.clientHeight - this.toolbarHeight;\n canvasMaxHeight = Browser.isDevice ? canvasMaxHeight - this.toolbarHeight : canvasMaxHeight;\n canvasMaxWidth -= 30;\n canvasMaxHeight -= 30;\n var widthScale = canvasMaxWidth / width;\n var heightScale = canvasMaxHeight / height;\n var cssMaxWidth = Math.min(width, canvasMaxWidth);\n var cssMaxHeight = Math.min(height, canvasMaxHeight);\n if (widthScale < 1 && widthScale < heightScale) {\n cssMaxWidth = width * widthScale;\n cssMaxHeight = height * widthScale;\n }\n else if (heightScale < 1 && heightScale < widthScale) {\n cssMaxWidth = width * heightScale;\n cssMaxHeight = height * heightScale;\n }\n return { width: cssMaxWidth, height: cssMaxHeight };\n };\n ImageEditor.prototype.setMaximumDimension = function (degree) {\n var newWidth;\n var newHeight;\n if (degree % 90 === 0 && degree % 180 !== 0) {\n newWidth = this.baseImg.height;\n newHeight = this.baseImg.width;\n }\n else if (degree % 180 === 0 || degree === 0) {\n newWidth = this.baseImg.width;\n newHeight = this.baseImg.height;\n }\n this.lowerCanvas.width = this.upperCanvas.width = newWidth;\n this.lowerCanvas.height = this.upperCanvas.height = newHeight;\n var maxDimension = this.calcMaxDimension(newWidth, newHeight);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n };\n ImageEditor.prototype.setCursor = function (x, y) {\n var bbox = this.upperCanvas.getBoundingClientRect();\n var ratio = this.calcRatio();\n if (this.factor === 1) {\n x = (x - bbox.left) * ratio.width;\n y = (y - bbox.top) * ratio.height;\n }\n else {\n x = (x - bbox.left) + ((this.pannStart.startX) / ratio.width * this.factor);\n y = (y - bbox.top) + ((this.pannStart.startY) / ratio.height * this.factor);\n }\n if (this.activeObj.horTopLine !== undefined) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n var actObj = extend({}, this.activeObj, {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(actObj, ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n else if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n if (this.currObjType.isCustomCrop || this.togglePen) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (this.upperCanvas.style.cursor === 'default') {\n if (this.objColl.length > 0) {\n this.setCursorFromObj(x, y, this.objColl, ratio);\n }\n }\n };\n ImageEditor.prototype.setCursorFromObj = function (x, y, obj, ratio) {\n if (this.togglePan) {\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n for (var i = 0; i < obj.length; i++) {\n var actObj = extend({}, obj[i], {}, true);\n if (this.factor !== 1) {\n actObj = this.setCursorForZoomState(obj[i], ratio, true);\n }\n if (x >= (actObj.topLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'nw-resize';\n break;\n }\n else if (x >= (actObj.topCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'n-resize';\n break;\n }\n else if (x >= (actObj.topRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.topRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.topRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.topRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'ne-resize';\n break;\n }\n else if (x >= (actObj.centerLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'w-resize';\n break;\n }\n else if (x >= (actObj.centerRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.centerRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.centerRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.centerRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'e-resize';\n break;\n }\n else if (x >= (actObj.bottomLeftCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomLeftCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomLeftCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomLeftCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'sw-resize';\n break;\n }\n else if (x >= (actObj.bottomCenterCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomCenterCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomCenterCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomCenterCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 's-resize';\n break;\n }\n else if (x >= (actObj.bottomRightCircle.startX - (actObj.topLeftCircle.radius)) &&\n x <= (actObj.bottomRightCircle.startX + (actObj.topLeftCircle.radius)) &&\n y >= (actObj.bottomRightCircle.startY - (actObj.topLeftCircle.radius)) &&\n y <= (actObj.bottomRightCircle.startY + (actObj.topLeftCircle.radius))) {\n this.upperCanvas.style.cursor = 'se-resize';\n break;\n }\n else if ((x >= actObj.activePoint.startX &&\n x <= actObj.activePoint.endX) && (y >= actObj.activePoint.startY &&\n y <= actObj.activePoint.endY)) {\n this.upperCanvas.style.cursor = 'move';\n break;\n }\n else {\n if (this.currObjType.isCustomCrop) {\n this.upperCanvas.style.cursor = 'crosshair';\n }\n this.upperCanvas.style.cursor = 'default';\n }\n }\n }\n };\n ImageEditor.prototype.setCursorForZoomState = function (obj, ratio, isMouseMove) {\n var tempObj = extend({}, obj, {}, true);\n tempObj.activePoint.startX = (tempObj.activePoint.startX / ratio.width) * this.factor;\n tempObj.activePoint.startY = (tempObj.activePoint.startY / ratio.width) * this.factor;\n tempObj.activePoint.endX = (tempObj.activePoint.endX / ratio.width) * this.factor;\n tempObj.activePoint.endY = (tempObj.activePoint.endY / ratio.width) * this.factor;\n tempObj.activePoint.width = tempObj.activePoint.endX - tempObj.activePoint.startX;\n tempObj.activePoint.height = tempObj.activePoint.endY - tempObj.activePoint.startY;\n this.updateActiveObject(ratio, tempObj.activePoint, tempObj, isMouseMove);\n tempObj.topLeftCircle.radius = (tempObj.topLeftCircle.radius / ratio.width) * this.factor;\n return tempObj;\n };\n ImageEditor.prototype.downloadImg = function (blob, fileName) {\n var a = document.createElement('a');\n a.href = blob;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n ImageEditor.prototype.toSVGImg = function (fileName) {\n var dataUrl = this.lowerCanvas.toDataURL();\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.lowerCanvas.style.maxWidth);\n svg.setAttribute('height', this.lowerCanvas.style.maxHeight);\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.lowerCanvas.height.toString());\n img.setAttributeNS(null, 'width', this.lowerCanvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + this.lowerCanvas.width + \"\\\"\") + (\" height=\\\"\" + this.lowerCanvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName === null) {\n return svgDataUrl;\n }\n else {\n this.downloadImg(svgDataUrl, fileName + '.' + 'svg');\n return null;\n }\n };\n ImageEditor.prototype.toBlobFn = function (fileName, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n var blobUrl = URL.createObjectURL(blob);\n //proxy.baseImg.src = blobUrl;\n proxy.downloadImg(blobUrl, fileName + '.' + type);\n }, 'image/png');\n };\n ImageEditor.prototype.addLetter = function (letter) {\n if (this.textBox.style.display === 'none' && (this.currObjType.isText || this.activeObj.shape === 'text')) {\n if (letter === 'Backspace') {\n this.keyHistory = this.keyHistory.slice(0, -1);\n }\n else {\n this.keyHistory += letter;\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.keyHistory + this.tempKeyHistory).width\n + this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n this.upperContext.fillText(this.keyHistory + this.tempKeyHistory, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY +\n this.activeObj.textSettings.fontSize);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isText = true;\n this.setActivePoint(width, height);\n }\n };\n ImageEditor.prototype.updateFontStyles = function (isTextBox) {\n this.upperContext.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n this.upperContext.fillStyle = this.activeObj.strokeSettings.strokeColor;\n var textStyle = '';\n if (this.activeObj.textSettings.bold) {\n textStyle = 'bold ';\n }\n if (this.activeObj.textSettings.italic) {\n textStyle = 'italic ';\n }\n if (this.activeObj.textSettings.bold && this.activeObj.textSettings.italic) {\n textStyle = 'italic bold ';\n }\n var fontSize = isTextBox ? parseFloat(this.textBox.style.fontSize) : this.activeObj.textSettings.fontSize;\n var fontFamily = this.textBox.style.display === 'block' ? this.textBox.style.fontFamily : this.activeObj.textSettings.fontFamily;\n this.upperContext.font = textStyle + fontSize + 'px' + ' ' + fontFamily;\n };\n ImageEditor.prototype.updateInMemoryCanvas = function (operation) {\n if (!this.disabled) {\n var imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.imgDataColl.push({ operation: operation, value: imgData });\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n }\n };\n ImageEditor.prototype.calcPrevRatio = function () {\n var oldWidthRatio;\n var oldHeightRatio;\n var maxDimension;\n if (this.degree === 0 || this.degree % 180 === 0) {\n maxDimension = this.calcMaxDimension(this.baseImg.height, this.baseImg.width);\n oldWidthRatio = this.baseImg.height / maxDimension.width;\n oldHeightRatio = this.baseImg.width / maxDimension.height;\n }\n else {\n maxDimension = this.calcMaxDimension(this.baseImg.width, this.baseImg.height);\n oldWidthRatio = this.baseImg.width / maxDimension.width;\n oldHeightRatio = this.baseImg.height / maxDimension.height;\n }\n return { width: oldWidthRatio, height: oldHeightRatio };\n };\n ImageEditor.prototype.textFlipDegree = function (canvasDraw, startX, startY) {\n var rows = this.activeObj.keyHistory.split('\\n');\n var height = this.activeObj.textSettings.fontSize;\n var lineHeight = ((height * rows.length) - (this.activeObj.textSettings.fontSize * rows.length)) / rows.length;\n var yPoint = (this.activeObj.textSettings.fontSize * 0.85) + lineHeight;\n for (var i = 0; i < rows.length; i++) {\n var text = rows[i];\n if (i > 0) {\n if (i === 1) {\n yPoint -= (this.activeObj.textSettings.fontSize * 0.85);\n }\n yPoint += this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.15;\n }\n canvasDraw.fillText(text, startX + this.activeObj.textSettings.fontSize * 0.15, startY +\n yPoint + (i > 0 ? this.activeObj.textSettings.fontSize * 0.25 : -this.activeObj.textSettings.fontSize * 0.35));\n }\n };\n ImageEditor.prototype.rotateText = function (canvasDraw) {\n var startX = this.activeObj.activePoint.startX;\n var startY = this.activeObj.activePoint.startY;\n var degree;\n if (this.activeObj.shapeDegree === 0) {\n degree = this.degree;\n }\n else {\n degree = this.degree - this.activeObj.shapeDegree;\n }\n if (degree < 0) {\n degree = 360 + degree;\n }\n if (degree % 360 === 0 && (this.degree !== -360 || this.currFlipState === '')) {\n startX = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.15;\n startY = this.activeObj.activePoint.startY + (this.activeObj.activePoint.endY - this.activeObj.activePoint.startY);\n var rows = this.activeObj.keyHistory.split('\\n');\n for (var i = 0; i < rows.length; i++) {\n startY = this.activeObj.activePoint.startY + (i * this.activeObj.textSettings.fontSize +\n this.activeObj.textSettings.fontSize * 0.25);\n canvasDraw.fillText(rows[i], startX, startY);\n }\n }\n else if (degree % 90 === 0 && degree % 180 !== 0) {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n canvasDraw.translate(-this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n if (degree % 90 === 0 && degree % 270 !== 0) {\n startY = (this.lowerCanvas.width - this.activeObj.activePoint.endX) + this.activeObj.textSettings.fontSize * 0.4;\n startX = this.activeObj.activePoint.startY;\n }\n else if (degree % 270 === 0) {\n startX = this.lowerCanvas.height - this.activeObj.activePoint.endY;\n startY = this.activeObj.activePoint.startX + this.activeObj.textSettings.fontSize * 0.4;\n }\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.height / 2, this.lowerCanvas.width / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n else {\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * degree);\n startX = this.lowerCanvas.width - this.activeObj.activePoint.endX;\n startY = (this.lowerCanvas.height - this.activeObj.activePoint.endY) + this.activeObj.textSettings.fontSize * 0.4;\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.textFlipDegree(canvasDraw, startX, startY);\n canvasDraw.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n canvasDraw.rotate(Math.PI / 180 * -degree);\n canvasDraw.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n }\n if (this.degree === 360 || this.degree === -360) {\n this.degree = 0;\n }\n };\n ImageEditor.prototype.redrawSelection = function () {\n var ratio = this.calcRatio();\n this.activeObj.activePoint.startX = 0;\n this.activeObj.activePoint.startY = 0;\n this.activeObj.activePoint.endX = this.lowerCanvas.width;\n this.activeObj.activePoint.endY = this.lowerCanvas.height;\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(ratio, this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n };\n ImageEditor.prototype.redrawObj = function (degree) {\n if (this.objColl.length > 0) {\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n this.updateCurrentActiveObjPoint(degree);\n }\n else if (degree === 90 || degree === -90) {\n this.updateCurrentActiveObjPoint(degree);\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n else {\n this.updateCurrentActiveObjPoint('zoom');\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0; i < this.objColl.length; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n }\n else if (this.objColl.length === 0 && (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n if (this.activeObj.horTopLine !== undefined && (this.activeObj.shape === undefined)) {\n this.redrawSelection();\n }\n else if (this.activeObj.horTopLine !== undefined && this.activeObj.shape !== undefined) {\n var splitWords = this.activeObj.shape.split('-');\n if (splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n }\n }\n else if ((degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical')) {\n var splitWords = void 0;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords !== undefined && splitWords[0] === 'crop') {\n this.select(splitWords[1]);\n }\n else {\n this.redrawSelection();\n }\n }\n };\n ImageEditor.prototype.updateCurrentActiveObjPoint = function (degree) {\n var oldRatio = this.calcPrevRatio();\n var ratio = this.calcRatio();\n var currActObjIndex;\n for (var index = 0; index < this.objColl.length; index++) {\n if (this.activeObj.shape === this.objColl[index].shape &&\n this.activeObj.activePoint.startX === this.objColl[index].activePoint.startX &&\n this.activeObj.activePoint.startY === this.objColl[index].activePoint.startY &&\n this.activeObj.activePoint.endX === this.objColl[index].activePoint.endX &&\n this.activeObj.activePoint.endY === this.objColl[index].activePoint.endY &&\n this.activeObj.currIndex === this.objColl[index].currIndex) {\n currActObjIndex = index;\n break;\n }\n }\n if (degree === 'horizontal' || degree === 'vertical' || degree === 'Horizontal' || degree === 'Vertical') {\n if (degree === 'horizontal' || degree === 'Horizontal') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startX <= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width / 2 + ((this.lowerCanvas.width / 2) -\n this.objColl[i].activePoint.endX);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startX >= this.lowerCanvas.width / 2) {\n this.objColl[i].activePoint.startX = this.lowerCanvas.width - this.objColl[i].activePoint.endX;\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n else if (degree === 'vertical' || degree === 'Vertical') {\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].activePoint.startY <= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height / 2 + ((this.lowerCanvas.height / 2) -\n this.objColl[i].activePoint.endY);\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n else if (this.objColl[i].activePoint.startY >= this.lowerCanvas.height / 2) {\n this.objColl[i].activePoint.startY = this.lowerCanvas.height - this.objColl[i].activePoint.endY;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n }\n if (currActObjIndex !== undefined) {\n this.activeObj = extend({}, this.objColl[currActObjIndex], {}, true);\n }\n }\n else if (degree === 90 || degree === -90) {\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX /= oldRatio.width;\n this.objColl[i].activePoint.startY /= oldRatio.height;\n this.objColl[i].activePoint.endX /= oldRatio.width;\n this.objColl[i].activePoint.endY /= oldRatio.height;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth /= (oldRatio.width / this.factor);\n this.calcCurrPoints(degree, this.objColl[i]);\n this.objColl[i].activePoint.endX = this.objColl[i].activePoint.startX +\n this.objColl[i].activePoint.width;\n this.objColl[i].activePoint.endY = this.objColl[i].activePoint.startY +\n this.objColl[i].activePoint.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.objColl[i].activePoint.startX *= oldRatio.width;\n this.objColl[i].activePoint.startY *= oldRatio.height;\n this.objColl[i].activePoint.endX *= oldRatio.width;\n this.objColl[i].activePoint.endY *= oldRatio.height;\n this.objColl[i].activePoint.width = this.objColl[i].activePoint.endX -\n this.objColl[i].activePoint.startX;\n this.objColl[i].activePoint.height = this.objColl[i].activePoint.endY -\n this.objColl[i].activePoint.startY;\n this.objColl[i].strokeSettings.strokeWidth *= ratio.width;\n }\n for (var i = 0; i < this.objColl.length; i++) {\n this.updateActiveObject(ratio, this.objColl[i].activePoint, this.objColl[i]);\n }\n }\n };\n ImageEditor.prototype.calcCurrPoints = function (degree, obj) {\n var oldRatio = this.calcPrevRatio();\n if (degree > 0) {\n var x = obj.activePoint.startX;\n obj.activePoint.startX = (this.lowerCanvas.width / oldRatio.width) - (obj.activePoint.startY + obj.activePoint.width);\n obj.activePoint.startY = x;\n }\n else {\n var y = obj.activePoint.startY;\n obj.activePoint.startY = (this.lowerCanvas.height / oldRatio.height) - (obj.activePoint.startX + obj.activePoint.height);\n obj.activePoint.startX = y;\n }\n };\n ImageEditor.prototype.redrawShape = function (obj) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(obj) === JSON.stringify(this.objColl[i])) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject('duplicate', obj);\n };\n ImageEditor.prototype.applyActObj = function () {\n var isActObj = false;\n if (this.activeObj.shape !== undefined && this.activeObj.shape === 'text' && this.activeObj.keyHistory === '') {\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n }\n else {\n var splitWords = void 0;\n var isCropSelection = false;\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (splitWords === undefined && this.currObjType.isCustomCrop) {\n isCropSelection = true;\n }\n else if (splitWords !== undefined && splitWords[0] === 'crop') {\n isCropSelection = true;\n }\n if (this.activeObj.activePoint.width !== 0 && this.activeObj.activePoint.height !== 0 && !isCropSelection) {\n for (var i = 0; i < this.objColl.length; i++) {\n if (JSON.stringify(this.activeObj) === JSON.stringify(this.objColl[i])) {\n isActObj = true;\n break;\n }\n }\n if (!isActObj) {\n if (isNullOrUndefined(this.activeObj.currIndex)) {\n this.activeObj.currIndex = 'shape_' + (this.objColl.length + 1);\n }\n var splitWords_2 = this.activeObj.currIndex.split('_');\n var tempObjColl = this.objColl.splice(0, parseInt(splitWords_2[1], 10) - 1);\n tempObjColl.push(extend({}, this.activeObj, {}, true));\n for (var i = 0; i < this.objColl.length; i++) {\n tempObjColl.push(this.objColl[i]);\n }\n this.objColl = tempObjColl;\n tempObjColl = [];\n this.refreshActiveObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.activeObj.flippedText = false;\n this.currObjType.shape = '';\n this.refreshActiveObj();\n }\n }\n }\n };\n ImageEditor.prototype.apply = function (shape, obj, canvas) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n if ((this.togglePen) && !this.currObjType.isCustomCrop) {\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.upperCanvas.toBlob(function (blob) {\n showSpinner(proxy_1.element);\n proxy_1.element.style.opacity = '0.5';\n proxy_1.lowerContext.clearRect(0, 0, proxy_1.lowerCanvas.width, proxy_1.lowerCanvas.height);\n var temp = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = proxy_1.initialAdjustmentValue = proxy_1.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n if (proxy_1.cssClass) {\n addClass([proxy_1.element], proxy_1.cssClass.split(' '));\n }\n proxy_1.lowerContext.drawImage(proxy_1.inMemoryCanvas, 0, 0);\n proxy_1.baseImg.src = URL.createObjectURL(blob);\n proxy_1.upperContext.clearRect(0, 0, proxy_1.upperCanvas.width, proxy_1.upperCanvas.height);\n proxy_1.togglePen = false;\n proxy_1.upperCanvas.style.cursor = 'default';\n proxy_1.lowerContext.filter = temp;\n var tempFilter = proxy_1.lowerContext.filter;\n proxy_1.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = proxy_1.objColl.length; i < len; i++) {\n proxy_1.apply(proxy_1.objColl[i].shape, proxy_1.objColl[i], 'duplicate');\n }\n proxy_1.lowerContext.filter = tempFilter;\n proxy_1.togglePen = true;\n }, 'image/png');\n this.degree = 0;\n }\n else {\n canvas = canvas ? canvas : 'original';\n this.currObjType.shape = shape !== undefined ? shape : this.currObjType.shape;\n if (this.currObjType.shape !== '') {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.drawObject(canvas, obj);\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n if (!shape && this.currObjType.shape !== '' && !this.currObjType.isCustomCrop) {\n this.objColl.push(extend({}, this.activeObj, {}, true));\n }\n this.keyHistory = '';\n }\n }\n }\n };\n ImageEditor.prototype.setCenterPoints = function (text, width, height) {\n var renderWidth;\n var renderHeight;\n if (text && width && height) {\n renderWidth = width;\n renderHeight = height;\n }\n else {\n renderWidth = this.activeObj.activePoint.width;\n renderHeight = this.activeObj.activePoint.height;\n }\n if (this.factor === 1) {\n this.activeObj.activePoint.startX = (this.lowerCanvas.width / 2) - renderWidth / 2;\n this.activeObj.activePoint.startY = (this.lowerCanvas.height / 2) - renderHeight / 2;\n this.activeObj.activePoint.endX = (this.lowerCanvas.width / 2) + renderWidth / 2;\n this.activeObj.activePoint.endY = (this.lowerCanvas.height / 2) + renderHeight / 2;\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n var visibleWidth = endPoint.x - this.pannStart.startX;\n var visibleHeight = endPoint.y - this.pannStart.startY;\n var centerX = (this.dragPoint.startX = visibleWidth / 2) + this.pannStart.startX;\n var centerY = this.dragPoint.startY = visibleHeight / 2 + this.pannStart.startY;\n this.activeObj.activePoint.startX = centerX - (renderWidth / 2);\n this.activeObj.activePoint.startY = centerY - (renderHeight / 2);\n this.activeObj.activePoint.endX = centerX + (renderWidth / 2);\n this.activeObj.activePoint.endY = centerY + (renderHeight / 2);\n }\n if (text && width && height) {\n this.textStartPoints.x = this.activeObj.activePoint.startX;\n this.textStartPoints.y = this.activeObj.activePoint.startY;\n }\n };\n ImageEditor.prototype.drawShape = function (type, strokeWidth, strokeColor, fillColor, start, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n this.redrawActObj();\n this.togglePen = false;\n this.keyHistory = '';\n this.upperCanvas.style.display = 'block';\n this.refreshActiveObj();\n this.currObjType.shape = type;\n if (this.currObjType.shape.toLowerCase() !== 'freehanddraw' && this.currObjType.shape.toLowerCase() !== '') {\n this.activeObj.shape = this.currObjType.shape.toLowerCase();\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeWidth = strokeWidth ? strokeWidth : this.activeObj.strokeSettings.strokeWidth;\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.strokeSettings.fillColor = fillColor ? fillColor : this.activeObj.strokeSettings.fillColor;\n var tempWidth = 100 / this.factor;\n var tempHeight = 100 / this.factor;\n this.activeObj.activePoint.width = tempWidth * ratio.width;\n this.activeObj.activePoint.height = tempHeight * ratio.height;\n if (this.currObjType.shape.toLowerCase() === 'line') {\n this.activeObj.lineDraw = 'horizontal';\n this.activeObj.activePoint.height /= 2;\n }\n else if (this.currObjType.shape.toLowerCase() === 'rectangle') {\n this.activeObj.activePoint.width += this.activeObj.activePoint.width / 2;\n }\n if (this.currObjType.shape.toLowerCase() === 'ellipse' && width) {\n this.activeObj.activePoint.width = 2 * width;\n this.activeObj.activePoint.height = 2 * height;\n }\n if (width && height) {\n this.activeObj.activePoint.width = width;\n this.activeObj.activePoint.height = height;\n }\n if (start !== undefined) {\n this.activeObj.activePoint.startX = start.x;\n this.activeObj.activePoint.startY = start.y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + this.activeObj.activePoint.width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + this.activeObj.activePoint.height;\n }\n else {\n this.setCenterPoints();\n }\n this.currObjType.isDragging = this.currObjType.isCustomCrop = false;\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.flipObjColl = [];\n this.drawObject('duplicate');\n this.refreshToolbar('shapes');\n }\n }\n };\n ImageEditor.prototype.drawShapeText = function (text, fontFamily, fontSize, bold, italic, strokeColor, x, y) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n var ratio = this.calcRatio();\n this.togglePen = false;\n this.redrawActObj();\n this.keyHistory = '';\n this.refreshActiveObj();\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n this.currObjType.isCustomCrop = false;\n this.currObjType.isText = this.currObjType.isInitialText = true;\n this.upperCanvas.style.display = 'block';\n this.currObjType.shape = this.activeObj.shape = 'text';\n if (isNullOrUndefined(this.activeObj.textSettings)) {\n this.activeObj.textSettings = this.textSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n this.activeObj.strokeSettings.strokeColor = strokeColor ? strokeColor : this.activeObj.strokeSettings.strokeColor;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.text = text ? text : this.activeObj.textSettings.text;\n this.activeObj.textSettings.fontFamily = fontFamily ? fontFamily : this.activeObj.textSettings.fontFamily;\n this.activeObj.textSettings.fontSize = fontSize ? fontSize : this.activeObj.textSettings.fontSize;\n this.activeObj.textSettings.bold = bold ? bold : this.activeObj.textSettings.bold;\n this.activeObj.textSettings.italic = italic ? italic : this.activeObj.textSettings.italic;\n if (isNullOrUndefined(this.activeObj.textSettings.fontSize)) {\n if (this.lowerCanvas.width > this.lowerCanvas.height) {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.width / 20));\n }\n else {\n this.activeObj.textSettings.fontSize = Math.floor((this.lowerCanvas.height / 20));\n }\n if (this.activeObj.textSettings.fontSize < 20 * (ratio.width + ratio.height)) {\n this.activeObj.textSettings.fontSize = 20 * (ratio.width + ratio.height);\n }\n if (this.factor > 1) {\n this.activeObj.textSettings.fontSize /= this.factor;\n }\n }\n this.activeObj.shapeDegree = this.degree;\n this.activeObj.shapeFlip = this.currFlipState;\n this.activeObj.flipObjColl = [];\n this.updateFontStyles();\n var width = this.upperContext.measureText(this.activeObj.textSettings.text).width +\n this.activeObj.textSettings.fontSize * 0.5;\n var height = this.activeObj.textSettings.fontSize + this.activeObj.textSettings.fontSize * 0.25;\n if (!isNullOrUndefined(x) && !isNullOrUndefined(y)) {\n this.activeObj.activePoint.startX = x;\n this.activeObj.activePoint.startY = y;\n this.activeObj.activePoint.endX = this.activeObj.activePoint.startX + width;\n this.activeObj.activePoint.endY = this.activeObj.activePoint.startY + height;\n }\n else {\n this.setCenterPoints(true, width, height);\n }\n this.addLetter(this.activeObj.textSettings.text);\n this.objColl.push(this.activeObj);\n this.redrawShape(this.objColl[this.objColl.length - 1]);\n this.refreshToolbar('text');\n }\n };\n ImageEditor.prototype.drawPen = function (context) {\n var ratio = this.calcRatio();\n context = context ? context : this.upperContext;\n this.upperCanvas.style.display = 'block';\n this.canvasRatio = this.calcRatio();\n if (isNullOrUndefined(this.activeObj.strokeSettings)) {\n this.activeObj.strokeSettings = this.strokeSettings;\n }\n if (isNullOrUndefined(this.activeObj.strokeSettings.strokeWidth)) {\n this.activeObj.strokeSettings.strokeWidth = (ratio.width + ratio.height) * 0.4;\n }\n context.strokeStyle = this.activeObj.strokeSettings.strokeColor;\n context.lineWidth = 2 * (this.activeObj.strokeSettings.strokeWidth) / this.factor;\n context.beginPath();\n context.moveTo(this.prevX, this.prevY);\n context.lineTo(this.currX, this.currY);\n context.stroke();\n context.closePath();\n };\n ImageEditor.prototype.getObjDetails = function (obj) {\n var shapeDetails = {};\n shapeDetails.id = obj.currIndex;\n shapeDetails.type = obj.shape;\n shapeDetails.startX = obj.activePoint.startX;\n shapeDetails.startY = obj.activePoint.startY;\n if (obj.shape === 'rectangle') {\n shapeDetails.width = obj.activePoint.width;\n shapeDetails.height = obj.activePoint.height;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'ellipse') {\n shapeDetails.radius = obj.activePoint.width / 2;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.fillColor = obj.strokeSettings.fillColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'line') {\n shapeDetails.length = obj.activePoint.width;\n shapeDetails.strokeColor = obj.strokeSettings.strokeColor;\n shapeDetails.strokeWidth = obj.strokeSettings.strokeWidth;\n }\n else if (obj.shape === 'text') {\n shapeDetails.text = obj.keyHistory;\n shapeDetails.fontSize = obj.textSettings.fontSize;\n shapeDetails.color = obj.strokeSettings.strokeColor;\n shapeDetails.fontStyle = [];\n if (obj.textSettings.bold) {\n shapeDetails.fontStyle.push('bold');\n }\n if (obj.textSettings.italic) {\n shapeDetails.fontStyle.push('italic');\n }\n }\n return shapeDetails;\n };\n ImageEditor.prototype.isPointsInRange = function (x, y) {\n var inRange = false;\n if (this.factor === 1) {\n if (x >= 0 && y >= 0 && x <= this.lowerCanvas.width && y <= this.lowerCanvas.width) {\n inRange = true;\n }\n }\n else {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height - this.pannEnd.startY };\n if (x >= this.pannStart.startX && y >= this.pannStart.startY && x <= endPoint.x && y <= endPoint.y) {\n inRange = true;\n }\n }\n return inRange;\n };\n ImageEditor.prototype.updateInMemoryContext = function (imgData, isUpdate) {\n var temp = extend({}, this.activeObj, {}, true);\n this.redrawImgWithObj();\n this.activeObj = temp;\n if (isNullOrUndefined(isUpdate)) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n };\n ImageEditor.prototype.clearActObj = function () {\n if (this.textBox.style.display === 'none') {\n this.refreshActiveObj();\n this.applyActObj();\n this.refreshActiveObj();\n this.currObjType.isCustomCrop = false;\n }\n };\n ImageEditor.prototype.rotateMultiple = function (length, degree) {\n for (var i = 0; i < length; i++) {\n if (degree > 0) {\n this.degree += 90;\n }\n else {\n this.degree -= 90;\n }\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(90 * (i + 1));\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.lowerContext.rotate(Math.PI / 180 * -90);\n }\n else {\n this.lowerContext.rotate(Math.PI / 180 * 90);\n }\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n if (degree > 0) {\n this.redrawObj(90);\n }\n else {\n this.redrawObj(-90);\n }\n }\n };\n ImageEditor.prototype.setBrightness = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.brightness = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('brightness', value);\n }\n };\n ImageEditor.prototype.setContrast = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.contrast = value;\n value = this.getFilterValue(value);\n value *= 100;\n this.updateAdjustment('contrast', value);\n }\n };\n ImageEditor.prototype.setHue = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.hue = value;\n value *= 3;\n this.updateAdjustment('hue', value);\n }\n };\n ImageEditor.prototype.setSaturation = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.saturation = value;\n value = this.getSaturationFilterValue(value);\n value *= 100;\n this.updateAdjustment('saturation', value);\n }\n };\n ImageEditor.prototype.setOpacity = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.opacity = value;\n if (value >= 50) {\n value /= 100;\n }\n else if (value === 40) {\n value = 0.45;\n }\n else if (value === 30) {\n value = 0.40;\n }\n else if (value === 20) {\n value = 0.35;\n }\n else if (value === 10) {\n value = 0.30;\n }\n else if (value === 0) {\n value = 0.25;\n }\n this.updateAdjustment('opacity', value);\n }\n };\n ImageEditor.prototype.setBlur = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.blur = value;\n value /= 20;\n this.updateAdjustment('blur', value);\n }\n };\n ImageEditor.prototype.setExposure = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.exposure = value;\n value = this.getFilterValue(value);\n this.updateAdjustment('exposure', value);\n }\n };\n ImageEditor.prototype.setFilter = function (type) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.updateAdjustment(type, null);\n }\n };\n ImageEditor.prototype.setBlackAndWhiteFilter = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.bw = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('bw');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('bw');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('bw');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getBlackAndWhiteData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.setSharpness = function (boolean) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.clearActObj();\n this.adjustmentLevel.sharpen = boolean;\n if (boolean) {\n if (this.degree === 0 && this.currFlipState === '') {\n this.replaceBWSharpenData('sharpen');\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.replaceBWSharpenData('sharpen');\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.replaceBWSharpenData('sharpen');\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n }\n var data = this.inMemoryContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n var imageData = this.getSharpenData(data);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n }\n else {\n if (this.degree === 0 && this.currFlipState === '') {\n this.updateBWSharpness();\n }\n else if (this.degree !== 0) {\n var tempDegree = this.degree;\n this.rotate(-tempDegree);\n this.updateBWSharpness();\n this.rotate(tempDegree);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n else if (this.currFlipState !== '') {\n var tempFlipState = this.currFlipState;\n this.flip(tempFlipState);\n this.updateBWSharpness();\n this.flip(tempFlipState);\n this.refreshToolbar('filter');\n if (this.sharpenedImgData) {\n this.sharpenedImgData = false;\n }\n }\n }\n }\n };\n ImageEditor.prototype.replaceBWSharpenData = function (type) {\n this.tempImageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n var imageData = this.inMemoryContext.getImageData(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (type === 'sharpen') {\n imageData = this.getSharpenData(this.tempImageData);\n }\n else {\n imageData = this.getBlackAndWhiteData(imageData);\n }\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = imageData.width;\n this.inMemoryCanvas.height = imageData.height;\n this.inMemoryContext.putImageData(imageData, 0, 0);\n var tempObj;\n for (var index = 0; index < this.imgDataColl.length; index++) {\n if (this.imgDataColl[index].operation !== 'freehanddraw') {\n tempObj = this.imgDataColl[index];\n break;\n }\n }\n this.imgDataColl.splice(0, 1, { operation: 'updateCanvas', value: imageData });\n this.imgDataColl.splice(1, 1, tempObj);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n };\n ImageEditor.prototype.updateBWSharpness = function () {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.tempImageData.width;\n this.inMemoryCanvas.height = this.tempImageData.height;\n this.inMemoryContext.putImageData(this.tempImageData, 0, 0);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.imgDataColl.shift();\n };\n ImageEditor.prototype.getSharpenData = function (imageData) {\n var data = imageData.data;\n var weights = [0, -1, 0, -1, 5, -1, 0, -1, 0];\n var side = Math.round(Math.sqrt(weights.length));\n var halfSide = Math.floor(side / 2);\n var sw = imageData.width;\n var sh = imageData.height;\n var output = this.inMemoryContext.createImageData(sw, sh);\n var dst = output.data;\n // go through the destination image pixels\n var alphaFac = 0;\n var r;\n var g;\n var b;\n var a;\n var dstOff;\n var scx;\n var scy;\n var srcOff;\n var wt;\n var x;\n var y;\n var cx;\n var cy;\n for (y = 0; y < sh; y++) {\n for (x = 0; x < sw; x++) {\n dstOff = (y * sw + x) * 4;\n r = 0;\n g = 0;\n b = 0;\n a = 0;\n for (cy = 0; cy < side; cy++) {\n for (cx = 0; cx < side; cx++) {\n scy = y + cy - halfSide;\n scx = x + cx - halfSide;\n if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n continue;\n }\n srcOff = (scy * sw + scx) * 4;\n wt = weights[cy * side + cx];\n r += data[srcOff] * wt;\n g += data[srcOff + 1] * wt;\n b += data[srcOff + 2] * wt;\n if (!alphaFac) {\n a += data[srcOff + 3] * wt;\n }\n }\n }\n dst[dstOff] = r;\n dst[dstOff + 1] = g;\n dst[dstOff + 2] = b;\n if (!alphaFac) {\n dst[dstOff + 3] = a;\n }\n else {\n dst[dstOff + 3] = data[dstOff + 3];\n }\n }\n }\n return output;\n };\n ImageEditor.prototype.getFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + ((value * 0.5) / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = ((value - 1) * 100) / 0.5;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 0) {\n filterValue = 1;\n }\n else {\n filterValue = 1 + (value / 100);\n }\n return filterValue;\n };\n ImageEditor.prototype.setSaturationFilterValue = function (value) {\n var filterValue;\n if (value === 1) {\n filterValue = 0;\n }\n else {\n filterValue = (value - 1) * 100;\n }\n return Math.round(filterValue);\n };\n ImageEditor.prototype.getBlackAndWhiteData = function (imageData) {\n for (var i = 0; i < imageData.data.length; i += 4) {\n var count = imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n var colour = 0;\n if (count > 383) {\n colour = 255;\n }\n imageData.data[i] = colour;\n imageData.data[i + 1] = colour;\n imageData.data[i + 2] = colour;\n imageData.data[i + 3] = 255;\n }\n return imageData;\n };\n /**\n * Clear a current selection.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.clearSelection = function () {\n if (!this.disabled && this.imgDataColl.length > 0) {\n this.togglePen = false;\n this.refreshActiveObj();\n this.dragElement = '';\n this.dragPoint.startX = this.dragPoint.startY = this.dragPoint.endX = this.dragPoint.endY = 0;\n this.currObjType.shape = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.isActiveObj = true;\n this.currObjType.isCustomCrop = false;\n this.upperCanvas.style.cursor = 'default';\n }\n };\n /**\n * Crops an image based on the selection.\n * The selection can be done through programmatically using the select method or through UI interactions.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.crop = function () {\n var isCrop = false;\n var splitWords;\n var transitionArgs = { startPoint: { x: this.activeObj.activePoint.startX, y: this.activeObj.activePoint.startY }, endPoint: { x: this.activeObj.activePoint.endX, y: this.activeObj.activePoint.endY } };\n this.trigger('cropping', transitionArgs);\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (!this.disabled && this.activeObj.horTopLine !== undefined && (this.currObjType.isCustomCrop || splitWords[0] === 'crop')) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_2 = this;\n isCrop = true;\n var canvasFilter = this.canvasFilter;\n var tempActObj = extend({}, this.activeObj, {}, true);\n this.lowerContext.filter = this.canvasFilter = 'none';\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n for (var j = 0; j < this.objColl.length; j++) {\n this.apply(this.objColl[j].shape, this.objColl[j]);\n this.refreshActiveObj();\n }\n this.activeObj = tempActObj;\n this.upperCanvas.style.display = 'none';\n var widthRatio = void 0;\n var heightRatio = void 0;\n var imgData = void 0;\n var zoomedRotate = false;\n if (this.factor === 1) {\n imgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n }\n else {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n imgData = this.imgDataColl[0].value;\n widthRatio = this.lowerCanvas.width / parseInt(this.lowerCanvas.style.maxWidth, 10);\n heightRatio = this.lowerCanvas.height / parseInt(this.lowerCanvas.style.maxHeight, 10);\n if (this.degree !== 0 && this.flipState !== '') {\n this.degree = 0;\n }\n if (this.degree !== 0) {\n zoomedRotate = true;\n this.lowerCanvas.width = this.upperCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.upperCanvas.height = this.baseImg.height;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n if (this.degree === 180) {\n this.updateInMemoryContext(imgData);\n }\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n if (this.degree !== 180) {\n this.updateInMemoryContext(imgData);\n }\n this.degree = 0;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.flipState !== '') {\n zoomedRotate = true;\n var tempObj = extend({}, this.activeObj, {}, true);\n this.flipState = '';\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(tempObj.activePoint.width, tempObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, tempObj.activePoint.startX, tempObj.activePoint.startY, tempObj.activePoint.width, tempObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n }\n if (!zoomedRotate) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = imgData.width;\n this.inMemoryCanvas.height = imgData.height;\n this.inMemoryContext.putImageData(imgData, 0, 0);\n this.updateInMemoryContext(imgData);\n var maxDimension = this.calcMaxDimension(this.activeObj.activePoint.width, this.activeObj.activePoint.height);\n this.lowerCanvas.style.maxWidth = this.upperCanvas.style.maxWidth = maxDimension.width + 'px';\n this.lowerCanvas.style.maxHeight = this.upperCanvas.style.maxHeight = maxDimension.height + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = maxDimension.width * widthRatio;\n this.lowerCanvas.height = this.upperCanvas.height = maxDimension.height * heightRatio;\n var cssObj = window.getComputedStyle(this.lowerCanvas);\n this.lowerCanvas.style.left = this.upperCanvas.style.left =\n ((this.element.clientWidth - parseInt(cssObj.width, 10) - 18) / 2) + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = ((this.element.clientHeight - this.toolbarHeight\n - parseInt(cssObj.height, 10)) / 2) + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, this.activeObj.activePoint.startX, this.activeObj.activePoint.startY, this.activeObj.activePoint.width, this.activeObj.activePoint.height, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n }\n if (this.activeObj.shape === 'crop-circle') {\n var imgData_1 = this.lowerContext.getImageData(0, 0, this.baseImg.width, this.baseImg.height);\n this.inMemoryCanvas.width = imgData_1.width;\n this.inMemoryCanvas.height = imgData_1.height;\n this.inMemoryContext.putImageData(imgData_1, 0, 0);\n this.lowerContext.save();\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.baseImg.width, this.baseImg.height);\n this.lowerContext.globalCompositeOperation = 'destination-in';\n this.lowerContext.beginPath();\n this.lowerContext.arc(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2, this.lowerCanvas.width / 2, 0, Math.PI * 2);\n this.lowerContext.closePath();\n this.lowerContext.fill();\n this.lowerContext.restore();\n this.currObjType.isActiveObj = true;\n }\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var blobUrl_1;\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n blobUrl_1 = URL.createObjectURL(blob);\n proxy_2.baseImg.src = blobUrl_1;\n proxy_2.imgDataColl = [];\n }, 'image/png');\n this.objColl = [];\n this.refreshActiveObj();\n this.degree = 0;\n this.flipState = '';\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.globalAlpha = 0;\n this.lowerContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.factor = 1;\n this.canvasFilter = canvasFilter;\n }\n return isCrop;\n };\n /**\n * Flips an image by horizontally or vertically.\n *\n * @param {Direction } direction - Specifies the direction to flip the image.\n * @returns {void}.\n */\n ImageEditor.prototype.flip = function (direction) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var transitionArgs = { direction: direction };\n this.trigger('flipping', transitionArgs);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n if (direction.toLowerCase() === 'horizontal') {\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n if (this.flipState === '' || this.flipState.toLowerCase() === 'vertical') {\n this.flipState = 'horizontal';\n }\n if (this.currFlipState.toLowerCase() === 'horizontal') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'horizontal';\n }\n }\n else {\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n if (this.flipState.toLowerCase() === '' || this.flipState.toLowerCase() === 'horizontal') {\n this.flipState = 'vertical';\n }\n if (this.currFlipState.toLowerCase() === 'vertical') {\n this.currFlipState = '';\n }\n else {\n this.currFlipState = 'vertical';\n }\n }\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n if (this.flipState.toLowerCase() === 'horizontal') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(this.lowerContext.canvas.width, 0);\n this.lowerContext.scale(-1, 1);\n this.upperContext.translate(this.upperContext.canvas.width, 0);\n this.upperContext.scale(-1, 1);\n }\n else if (this.flipState.toLowerCase() === 'vertical') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.objColl[i].flippedText = false;\n if (this.objColl[i].shapeFlip !== '' && this.objColl[i].shapeFlip === this.currFlipState) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n else {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n }\n this.lowerContext.filter = tempFilter;\n this.lowerContext.translate(0, this.lowerContext.canvas.height);\n this.lowerContext.scale(1, -1);\n this.upperContext.translate(0, this.upperContext.canvas.height);\n this.upperContext.scale(1, -1);\n }\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n if (this.objColl[i].flipObjColl.length === 0) {\n this.objColl[i].flipObjColl.push(direction);\n }\n else if (this.objColl[i].flipObjColl[this.objColl[i].flipObjColl.length - 1] === direction) {\n this.objColl[i].flipObjColl.pop();\n }\n else {\n this.objColl[i].flipObjColl.push(direction);\n }\n }\n this.redrawObj(direction.toLowerCase());\n if (this.flipState === '') {\n var tempFilter = this.lowerContext.filter;\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n for (var i = 0, len = this.objColl.length; i < len; i++) {\n this.apply(this.objColl[i].shape, this.objColl[i]);\n }\n this.lowerContext.filter = tempFilter;\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n this.activeObj.activePoint = { startX: 0, startY: 0, endX: this.lowerCanvas.width,\n endY: this.lowerCanvas.height, width: this.lowerCanvas.width, height: this.lowerCanvas.height };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n }\n this.refreshToolbar('main');\n }\n };\n /**\n * Return an image as ImageData.\n *\n * @returns {ImageData}.\n */\n ImageEditor.prototype.getImageData = function () {\n var data = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n return data;\n };\n /**\n * Load/opens an image for editing within an image editor.\n *\n * @param {string | ImageData } data - Specifies url of the Image or image data.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.open = function (data) {\n if (!this.disabled) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_3 = this;\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n var toolbar_11 = document.querySelector('#' + this.element.id + '_currPos');\n if (toolbar_11) {\n toolbar_11.style.display = 'none';\n }\n if (this.defToolbarItems.length === 0 &&\n (isNullOrUndefined(document.getElementById(this.element.id + '_toolbar')))) {\n this.toolbarHeight = 0;\n }\n if (isNullOrUndefined(this.toolbarTemplate)) {\n this.update();\n }\n this.degree = 0;\n this.flipState = '';\n this.factor = 1;\n this.imgDataColl = [];\n var type = typeof (data);\n if (type === 'string') {\n var fileName = data.split('.');\n if (fileName[fileName.length - 1].toLowerCase() === 'jpg' || fileName[fileName.length - 1].toLowerCase() === 'jpeg') {\n this.imageFileType = 'Jpeg';\n }\n else if (fileName[fileName.length - 1].toLowerCase() === 'png') {\n this.imageFileType = 'Png';\n }\n else if (fileName[fileName.length - 1].toLowerCase() === 'svg') {\n this.imageFileType = 'Svg';\n }\n fileName = fileName[fileName.length - 2].split('/');\n this.imageFileName = fileName[fileName.length - 1];\n this.imageOnLoad(data);\n }\n else {\n this.imageFileName = 'ImageEditor';\n this.imageFileType = 'Jpeg';\n var tempFilter = this.lowerContext.filter;\n this.lowerCanvas = document.querySelector('#' + this.element.id + '_lowerCanvas');\n this.upperCanvas = document.querySelector('#' + this.element.id + '_upperCanvas');\n this.lowerContext = this.lowerCanvas.getContext('2d');\n this.upperContext = this.upperCanvas.getContext('2d');\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryCanvas.width = this.baseImg.width = data.width;\n this.inMemoryCanvas.height = this.baseImg.height = data.height;\n this.inMemoryContext.putImageData(data, 0, 0);\n this.imgDataColl.push({ operation: 'open', value: data });\n this.lowerCanvas.width = this.upperCanvas.width = data.width;\n this.lowerCanvas.height = this.upperCanvas.height = data.height;\n this.lowerContext.filter = tempFilter;\n var temp = this.lowerContext.filter;\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = temp;\n this.redrawImg(this.lowerContext.filter);\n hideSpinner(this.element);\n this.element.style.opacity = '1';\n // eslint-disable-next-line @typescript-eslint/tslint/config\n this.lowerCanvas.toBlob(function (blob) {\n showSpinner(proxy_3.element);\n proxy_3.baseImg.src = URL.createObjectURL(blob);\n }, 'image/png');\n }\n }\n };\n /**\n * Reset all the changes and revert to original image.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.reset = function () {\n if (!this.disabled) {\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.lowerContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.width, this.inMemoryCanvas.height);\n this.upperContext.clearRect(0, 0, this.inMemoryCanvas.height, this.inMemoryCanvas.width);\n this.lowerContext.filter = 'brightness(' + 1 + ') ' + 'contrast(' + 100 + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n showSpinner(this.element);\n this.element.style.opacity = '0.5';\n if (this.imgDataColl.length > 0) {\n if (this.imgDataColl[0].operation === 'freehanddraw') {\n this.imgDataColl.splice(0, 1);\n this.imgDataColl.splice(1, 1);\n }\n this.inMemoryCanvas.width = this.imgDataColl[0].value.width;\n this.inMemoryCanvas.height = this.imgDataColl[0].value.height;\n this.inMemoryContext.putImageData(this.imgDataColl[0].value, 0, 0);\n this.redrawImg(this.lowerContext.filter);\n this.lowerCanvas.width = this.baseImg.width;\n this.lowerCanvas.height = this.baseImg.height;\n }\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.baseImg.src = this.baseImgSrc.id;\n this.factor = 1;\n this.refreshToolbar('main');\n if (Browser.isDevice && document.getElementById(this.element.id + '_bottomToolbar')) {\n getComponent(document.getElementById(this.element.id + '_bottomToolbar'), 'toolbar').destroy();\n }\n this.objColl = [];\n this.imgDataColl = [];\n this.degree = 0;\n this.flipState = this.keyHistory = this.currFlipState = '';\n this.upperCanvas.style.display = 'none';\n this.togglePan = this.togglePen = false;\n this.upperCanvas.style.cursor = this.lowerCanvas.style.cursor = 'default';\n this.dragCanvas = this.activeObj.flippedText = false;\n this.currImgData = {};\n this.pannStart = { startX: 0, startY: 0, width: 0, height: 0 };\n this.pannEnd = { startX: 0, startY: 0, width: 0, height: 0 };\n this.lowerContext.lineWidth = this.upperContext.lineWidth = undefined;\n this.lastX = this.lastY = 0;\n this.dragStart = { x: 0, y: 0 };\n this.touchEndPoint = {};\n this.prevX = this.currX = this.prevY = this.currY = 0;\n this.tempKeyHistory = '';\n this.currentToolbar = 'main';\n this.textStartPoints = { x: 0, y: 0 };\n this.fontSizeColl = this.penDrawColl = [];\n this.textBox.value = this.textBox.textContent = '';\n this.textBox.style.display = 'none';\n this.strokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.textSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.tempStrokeSettings = { strokeColor: '#fff', fillColor: '', strokeWidth: null };\n this.tempTextSettings =\n { text: 'Enter Text', fontFamily: 'Arial', fontSize: null, bold: false, italic: false, underline: false };\n this.refreshActiveObj();\n this.timer = undefined;\n this.penStrokeWidth = undefined;\n this.isScreenOriented = false;\n this.tempObjColl = [];\n this.tempObjColl = undefined;\n this.adjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.tempAdjustmentLevel = { brightness: 0, contrast: 0, hue: 0, opacity: 100, saturation: 0, blur: 0, exposure: 0, sharpen: false, bw: false };\n this.imageFileName = '';\n this.imageFileType = undefined;\n this.canvasFilter = this.currentFilter = this.tempAdjustmentValue = '';\n this.lowerContext.filter = this.initialAdjustmentValue = this.adjustmentValue = 'brightness(' + 1 + ') ' + 'contrast(' + 100\n + '%) ' + 'hue-rotate(' + 0 + 'deg) ' +\n 'saturate(' + 100 + '%) ' + 'opacity(' + 1 + ') ' + 'blur(' + 0 + 'px) ' + 'sepia(0%) ' + 'grayscale(0%) ' + 'invert(0%)';\n this.tempImageData = undefined;\n this.sharpenedImgData = this.isBrightnessAdjusted = this.isInitialLoading = false;\n this.currObjType = { shape: '', isDragging: false, isActiveObj: false, isText: false, isInitialText: false, isLine: false,\n isInitialLine: false, isCustomCrop: false, isZoomed: false, isFiltered: false, isSave: false };\n }\n };\n /**\n * Rotate an image to clockwise and anti-clockwise.\n *\n * @param {number} degree - Specifies a degree to rotate an image.\n * positive integer value for clockwise and negative integer value for anti-clockwise rotation.\n *\n * @returns {boolean}.\n */\n ImageEditor.prototype.rotate = function (degree) {\n var isRotate = false;\n if (!this.disabled && this.imgDataColl.length > 0 && (degree % 90 === 0)) {\n isRotate = true;\n var transitionArgs = { degree: degree };\n this.trigger('rotating', transitionArgs);\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.refreshToolbar('main');\n }\n var length_1 = Math.abs(degree / 90);\n if (length_1 > 1) {\n this.rotateMultiple(length_1, degree);\n }\n else {\n this.degree += degree;\n if (this.degree === 360) {\n this.degree = 0;\n }\n var temp = this.lowerContext.filter;\n this.lowerContext.save();\n this.setMaximumDimension(this.degree);\n this.lowerContext.translate(this.lowerCanvas.width / 2, this.lowerCanvas.height / 2);\n this.lowerContext.rotate(Math.PI / 180 * degree);\n this.lowerCanvas.style.left = this.upperCanvas.style.left = (this.element.clientWidth - parseInt(this.lowerCanvas.style.maxWidth, 10) - 18) / 2 + 1 + 'px';\n this.lowerCanvas.style.top = this.upperCanvas.style.top = (this.element.clientHeight - this.toolbarHeight - parseInt(this.lowerCanvas.style.maxHeight, 10)) / 2 + 1 + 'px';\n this.updateBrightnessFilter();\n this.lowerContext.drawImage(this.inMemoryCanvas, -this.lowerCanvas.height / 2, -this.lowerCanvas.width / 2);\n this.lowerContext.filter = temp;\n this.lowerContext.rotate(Math.PI / 180 * -degree);\n this.lowerContext.translate(-this.lowerCanvas.width / 2, -this.lowerCanvas.height / 2);\n this.lowerContext.restore();\n this.currImgData = this.lowerContext.getImageData(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n this.lowerContext.filter = this.canvasFilter;\n this.updateBrightnessFilter();\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.drawImage(this.inMemoryCanvas, 0, 0);\n this.lowerContext.filter = temp;\n this.redrawObj(degree);\n }\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n this.factor = 1;\n this.refreshToolbar('main');\n }\n return isRotate;\n };\n /**\n * Export an image using the specified file name and the extension.\n *\n * @param {string} type - Specifies a format of image to be saved.\n * @param {string} fileName – Specifies a file name to be saved\n *\n * @returns {void}.\n */\n ImageEditor.prototype.export = function (type, fileName) {\n var _this = this;\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (this.togglePen) {\n this.currObjType.isZoomed = true;\n this.applyPenDraw();\n }\n this.applyActObj();\n this.lowerContext.filter = this.canvasFilter;\n if (this.factor !== 1) {\n this.lowerContext.setTransform(1, 0, 0, 1, 0, 0);\n this.upperContext.setTransform(1, 0, 0, 1, 0, 0);\n this.factor = 1;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.redrawImgWithObj();\n }\n type = type ? type : 'Png';\n this.redrawActObj();\n fileName = fileName ? fileName : this.imageFileName;\n var beforeSave = { cancel: false, fileName: fileName, fileType: type };\n var saved_1 = { fileName: fileName ? fileName : this.imageFileName, fileType: type };\n this.trigger('beforeSave', beforeSave, function (observableSaveArgs) {\n if (!observableSaveArgs.cancel) {\n _this.currObjType.isSave = true;\n fileName = observableSaveArgs.fileName ? observableSaveArgs.fileName : fileName;\n if (type.toLowerCase() === 'svg') {\n fileName = fileName || _this.imageFileName;\n _this.toSVGImg(fileName);\n }\n else if (type.toLowerCase() === 'jpeg') {\n fileName = fileName || _this.imageFileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n else {\n fileName = fileName || _this.imageFileName;\n _this.toBlobFn(fileName, type.toLowerCase());\n }\n _this.trigger('saved', saved_1);\n _this.refreshToolbar('main');\n }\n });\n }\n };\n /**\n * Perform selection in an image editor. The selection helps to crop an image.\n *\n * @param {string} type - Specifies the shape - circle / square / custom selection / pre-defined ratios.\n * @param {number} startX – Specifies the start x-coordinate point of the selection.\n * @param {number} startY – Specifies the start y-coordinate point of the selection.\n * @param {number} width - Specifies the width of the selection area.\n * @param {number} height - Specifies the height of the selection area.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created : () => {\n * imageObj.select('16:9', 10, 10);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.select = function (type, startX, startY, width, height) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n var ratio = this.calcRatio();\n var points = void 0;\n this.redrawActObj();\n this.refreshActiveObj();\n this.keyHistory = '';\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.upperCanvas.style.display = 'block';\n var cropShape = 'crop-' + type;\n if (cropShape.toLowerCase() === 'crop-custom') {\n if (this.currObjType.shape === '') {\n this.currObjType.isCustomCrop = true;\n this.upperContext.fillStyle = 'rgb(0, 0, 0, 0.5)';\n this.upperContext.fillRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperCanvas.style.cursor = 'crosshair';\n if (Browser.isDevice) {\n var arcRadius = (7.5 * (ratio.width > ratio.height ? ratio.width : ratio.height)) / this.factor;\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX + arcRadius, startY: this.pannStart.startY + arcRadius,\n endX: endPoint.x - arcRadius, endY: endPoint.y - arcRadius };\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n this.upperCanvas.style.cursor = 'default';\n }\n }\n if (startX && startY) {\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n this.currObjType.shape = this.activeObj.shape = cropShape.toLowerCase();\n this.activeObj.activePoint.startX = startX + ratio.width;\n this.activeObj.activePoint.startY = startY + ratio.height;\n this.activeObj.activePoint.endX = this.baseImg.width - (2 * ratio.width);\n this.activeObj.activePoint.endY = this.baseImg.height - (2 * ratio.height);\n this.activeObj.activePoint.width = this.activeObj.activePoint.endX - this.activeObj.activePoint.startX;\n this.activeObj.activePoint.height = this.activeObj.activePoint.endY - this.activeObj.activePoint.startY;\n this.drawObject('duplicate');\n }\n }\n else if (cropShape.toLowerCase() === 'crop-canvas') {\n this.upperCanvas.style.display = 'none';\n this.dragCanvas = true;\n }\n else {\n this.currObjType.isCustomCrop = false;\n this.currObjType.shape = cropShape.toLowerCase();\n if (width && height) {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + height,\n width: width, height: height };\n }\n else if (width && cropShape === 'crop-circle') {\n points = { startX: startX, startY: startY, endX: startX + width, endY: startY + width,\n width: width, height: width };\n }\n this.activeObj.shape = cropShape.toLowerCase();\n this.drawObject('duplicate', null, null, true, points);\n }\n }\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.freeHandDraw = function (value) {\n if (value) {\n this.togglePen = true;\n this.upperCanvas.style.cursor = 'crosshair';\n this.drawPen();\n }\n else {\n this.upperCanvas.style.cursor = 'default';\n this.applyPenDraw();\n }\n this.refreshToolbar('pen');\n };\n /**\n * Enable or disable a freehand drawing in an Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable freehand drawing.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.freehandDraw = function (value) {\n this.freeHandDraw(value);\n };\n /**\n * Enable or disable a panning on the Image Editor.\n *\n * @param {boolean} value - Specifies a value whether enable or disable panning.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.pan = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if (value) {\n this.togglePan = true;\n this.redrawActObj();\n this.dragCanvas = true;\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'grab';\n }\n else {\n this.dragCanvas = this.togglePan = false;\n this.refreshActiveObj();\n this.lowerCanvas.style.cursor = this.upperCanvas.style.cursor = 'default';\n }\n }\n };\n /**\n * Increase / Decrease the magnification of an image.\n *\n * @param {boolean} value - Specifies a value to be zoomed on the image.\n * @returns {void}.\n */\n ImageEditor.prototype.zoom = function (value) {\n if (!this.disabled && this.imgDataColl.length > 0) {\n if ((this.factor === 1 && value < 0) || (this.factor > 8 && value > 0)) {\n return;\n }\n var splitWords = [];\n var activeObjShape = void 0;\n if (!isNullOrUndefined(this.activeObj.activePoint)) {\n if (this.activeObj.shape !== undefined) {\n splitWords = this.activeObj.shape.split('-');\n }\n if (this.currObjType.isCustomCrop || splitWords[0] === 'crop') {\n activeObjShape = this.currObjType.isCustomCrop ? 'custom' : splitWords[1];\n }\n }\n this.redrawActObj();\n this.refreshActiveObj();\n this.upperContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.lowerContext.filter = this.canvasFilter;\n this.upperCanvas.style.cursor = 'default';\n if (this.degree !== 0) {\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.inMemoryContext.clearRect(0, 0, this.lowerCanvas.height, this.lowerCanvas.width);\n this.inMemoryCanvas.width = this.currImgData.width;\n this.inMemoryCanvas.height = this.currImgData.height;\n this.inMemoryContext.putImageData(this.currImgData, 0, 0);\n }\n if (value === 0.1 || value === -0.1) {\n this.lastX = this.lowerCanvas.width / 2;\n this.lastY = this.lowerCanvas.height / 2;\n }\n if (value === 1.1 || value === -1.1) {\n this.zoomImg(value);\n }\n else {\n if (value > 0) {\n this.zoomImg(3.75);\n }\n else {\n this.zoomImg(-3.75);\n }\n }\n this.refreshActiveObj();\n if (!isNullOrUndefined(activeObjShape)) {\n if (activeObjShape === 'custom') {\n var endPoint = { x: this.lowerCanvas.width - this.pannEnd.startX, y: this.lowerCanvas.height -\n this.pannEnd.startY };\n this.activeObj.activePoint = { startX: this.pannStart.startX, startY: this.pannStart.startY, endX: endPoint.x,\n endY: endPoint.y, width: endPoint.x - this.pannStart.startX, height: endPoint.y - this.pannStart.startY };\n this.updateActiveObject(this.calcRatio(), this.activeObj.activePoint, this.activeObj);\n this.drawObject('duplicate', this.activeObj);\n }\n else {\n this.select(activeObjShape);\n }\n this.refreshToolbar('main', true, true);\n }\n var zoomOut = document.querySelector('#' + this.element.id + '_zoomOut');\n if (!isNullOrUndefined(zoomOut) && this.factor === 1) {\n zoomOut.classList.add('e-disabled');\n }\n else if (!isNullOrUndefined(zoomOut)) {\n zoomOut.classList.remove('e-disabled');\n }\n if (!this.togglePan) {\n this.callMainToolbar(false, true);\n }\n this.autoEnablePan();\n if (isNullOrUndefined(this.activeObj.activePoint) || this.activeObj.activePoint.width === 0) {\n this.refreshToolbar('main');\n }\n else {\n this.refreshToolbar('main', true, true);\n }\n var panBtn = this.element.querySelector('.e-img-pan .e-btn');\n if (!isNullOrUndefined(panBtn) && this.togglePan) {\n panBtn.classList.add('e-selected-btn');\n }\n else if (!isNullOrUndefined(panBtn)) {\n panBtn.classList.remove('e-selected-btn');\n }\n }\n };\n /**\n * Draw ellipse on an image.\n *\n * @param {number} x - Specifies x-coordinate of ellipse.\n * @param {number} y - Specifies y-coordinate of ellipse.\n * @param {number} radiusX - the radius x point for the ellipse.\n * @param {number} radiusY - the radius y point for the ellipse.\n * @param {number} strokeWidth - the stroke width of ellipse.\n * @param {string} strokeColor - the stroke color of ellipse.\n * @param {string} fillColor - the fill color of the ellipse.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawEllipse(10, 10, 40, 60);\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.drawEllipse = function (x, y, radiusX, radiusY, strokeWidth, strokeColor, fillColor) {\n var isEllipse = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isEllipse = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('ellipse', strokeWidth, strokeColor, fillColor, start, radiusX, radiusY);\n }\n return isEllipse;\n };\n /**\n * Draw line on an image.\n *\n * @param {number} startX – Specifies start point x-coordinate of line.\n * @param {number} startY – Specifies start point y-coordinate of line.\n * @param {number} endX - Specifies end point x-coordinates of line.\n * @param {number} endY - Specifies end point y-coordinates of the line.\n * @param {number} strokeWidth - Specifies the stroke width of line.\n * @param {string} strokeColor - Specifies the stroke color of line.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawLine = function (startX, startY, endX, endY, strokeWidth, strokeColor) {\n var isLine = false;\n var inRange = this.isPointsInRange(startX, startY);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isLine = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj, currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: startX, y: startY };\n var width = endX - startX;\n var height = endY - startY;\n this.drawShape('line', strokeWidth, strokeColor, null, start, width, height);\n }\n return isLine;\n };\n /**\n * Draw a rectangle on an image.\n *\n * @param {number} x - Specifies x-coordinate of rectangle.\n * @param {number} y - Specifies y-coordinate of rectangle.\n * @param {number} width - Specifies the width of the rectangle.\n * @param {number} height - Specifies the height of the rectangle.\n * @param {number} strokeWidth - Specifies the stroke width of rectangle.\n * @param {string} strokeColor - Specifies the stroke color of rectangle.\n * @param {string} fillColor - the fill color of the rectangle.\n * @returns {boolean}.\n */\n ImageEditor.prototype.drawRectangle = function (x, y, width, height, strokeWidth, strokeColor, fillColor) {\n var isRectangle = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isRectangle = true;\n var shapeChangingArgs = { action: 'insert', previousShapeSettings: this.activeObj,\n currentShapeSettings: this.activeObj };\n this.trigger('shapeChanging', shapeChangingArgs);\n if (this.currObjType.shape === 'freehanddraw') {\n this.apply();\n this.upperCanvas.style.cursor = 'default';\n this.currObjType.shape = '';\n }\n this.currObjType.isCustomCrop = false;\n var start = { x: x, y: y };\n this.drawShape('rectangle', strokeWidth, strokeColor, fillColor, start, width, height);\n }\n return isRectangle;\n };\n /**\n * Draw a text on an image.\n *\n * @param {number} x - Specifies x-coordinate of text.\n * @param {number} y - Specifies y-coordinate of text.\n * @param {string} text - Specifies the text to add on an image.\n * @param {string} fontFamily - Specifies the font family of the text.\n * @param {number} fontSize - Specifies the font size of the text.\n * @param {boolean} bold - Specifies whether the text is bold or not.\n * @param {boolean} italic - Specifies whether the text is italic or not.\n * @param {string} color - Specifies font color of the text.\n * @returns {boolean}.\n *\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.drawText(10, 10, 'Syncfusion', 'Arial', 12, true, true, '#000');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n *\n * </script>\n * ```\n */\n ImageEditor.prototype.drawText = function (x, y, text, fontFamily, fontSize, bold, italic, color) {\n var isText = false;\n var inRange = this.isPointsInRange(x, y);\n if (!this.disabled && this.imgDataColl.length > 0 && inRange) {\n isText = true;\n this.drawShapeText(text, fontFamily, fontSize, bold, italic, color, x, y);\n }\n return isText;\n };\n /**\n * Selects a shape based on the given shape id. The id can be got from the public method ‘getShapeSettings’.\n *\n * @param {string} id - Specifies the shape id to select a shape on an image.\n * @returns {boolean}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.selectShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.selectShape = function (id) {\n this.applyActObj();\n var obj;\n var isSelected;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n if (isNullOrUndefined(obj)) {\n isSelected = false;\n }\n else {\n isSelected = true;\n this.activeObj = obj;\n this.lowerContext.filter = this.canvasFilter;\n this.redrawShape(this.activeObj);\n if (this.activeObj.shape === 'text') {\n this.refreshToolbar('text');\n }\n else if (this.activeObj.shape === 'pen') {\n this.refreshToolbar('pen');\n }\n else {\n this.refreshToolbar('shapes');\n }\n this.updateToolbarItems(this.calcRatio());\n }\n return isSelected;\n };\n /**\n * Deletes a shape based on the given shape id. The id can be got from the public method getShapeSettings.\n *\n * @param {string} id - Specifies the shape id to delete the shape on an image.\n * @returns {void}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.deleteShape('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.deleteShape = function (id) {\n this.applyActObj();\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n this.objColl.splice(i, 1);\n break;\n }\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.redrawImgWithObj();\n this.refreshToolbar('main');\n };\n /**\n * Get particular shapes details based on id of the shape which is drawn on an image editor.\n *\n * @param {string} id - Specifies the shape id on an image.\n * @returns {ShapeSettings}.\n * ```html\n * <div id='imageeditor'></div>\n * ```\n * ```typescript\n * <script>\n * var imageObj = new ImageEditor({\n * created: () => {\n * imageObj.getShapeSetting('shape_1');\n * }\n * });\n * imageObj.appendTo(\"#imageeditor\");\n * </script>\n * ```\n */\n ImageEditor.prototype.getShapeSetting = function (id) {\n this.applyActObj();\n var obj;\n for (var i = 0; i < this.objColl.length; i++) {\n if (this.objColl[i].currIndex === id) {\n obj = extend({}, this.objColl[i], {}, true);\n break;\n }\n }\n var shapeDetails = this.getObjDetails(obj);\n return shapeDetails;\n };\n /**\n * Get all the shapes details which is drawn on an image editor.\n *\n * @returns {ShapeSettings[]}.\n */\n ImageEditor.prototype.getShapeSettings = function () {\n this.applyActObj();\n var shapeDetailsColl = [];\n for (var i = 0; i < this.objColl.length; i++) {\n var shapeDetails = this.getObjDetails(this.objColl[i]);\n shapeDetailsColl.push(shapeDetails);\n }\n return shapeDetailsColl;\n };\n /**\n * To refresh the Canvas Wrapper.\n *\n * @returns {void}.\n */\n ImageEditor.prototype.update = function () {\n var canvasWrapper = document.querySelector('#' + this.element.id + '_canvasWrapper');\n canvasWrapper.style.width = this.element.offsetWidth + 'px';\n this.lowerCanvas.width = this.upperCanvas.width = this.element.offsetWidth;\n if (Browser.isDevice) {\n canvasWrapper.style.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - (2 * this.toolbarHeight) - 3;\n }\n else {\n canvasWrapper.style.height = this.element.offsetHeight - this.toolbarHeight - 1 + 'px';\n this.lowerCanvas.height = this.upperCanvas.height = this.element.offsetHeight - this.toolbarHeight - 1;\n }\n this.lowerContext.filter = this.canvasFilter;\n this.lowerContext.clearRect(0, 0, this.lowerCanvas.width, this.lowerCanvas.height);\n this.upperContext.clearRect(0, 0, this.upperCanvas.width, this.upperCanvas.height);\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFilterOptions } filterOption - Specifies the filter options to the image.\n * @returns {void}.\n */\n ImageEditor.prototype.applyImageFilter = function (filterOption) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n var filterValue = filterOption.split(' ');\n this.setFilter(filterValue.join('').toLowerCase());\n };\n /**\n * To apply the filters to an image\n *\n * @param {ImageFinetuneOptions } finetuneOption - Specifies the finetune options to the image.\n * @param {number } value - Specifies the value for finetuning the image.\n * @returns {void}.\n *\n */\n ImageEditor.prototype.finetuneImage = function (finetuneOption, value) {\n if (this.initialAdjustmentValue === '') {\n this.initialAdjustmentValue = 'brightness(1) contrast(100%) hue-rotate(0deg) saturate(100%) opacity(1) blur(0px) sepia(0%) grayscale(0%) invert(0%)';\n }\n this.lowerContext.filter = this.initialAdjustmentValue;\n switch (finetuneOption) {\n case 'Brightness':\n this.setBrightness(value);\n break;\n case 'Contrast':\n this.setContrast(value);\n break;\n case 'Hue':\n this.setHue(value);\n break;\n case 'Saturation':\n this.setSaturation(value);\n break;\n case 'Opacity':\n this.setOpacity(value);\n break;\n case 'Blur':\n this.setBlur(value);\n break;\n case 'Exposure':\n this.setExposure(value);\n break;\n }\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canUndo = function () {\n return false;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.canRedo = function () {\n return false;\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.clear = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.clear.call(this);\n }\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.draw = function (text, fontFamily, fontSize) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.draw.call(this, text, fontFamily, fontSize);\n }\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.getBlob = function (url) {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n return url;\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n * @private\n */\n ImageEditor.prototype.isEmpty = function () {\n return false;\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.load = function (signature, width, height) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.load.call(this, signature, width, height);\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.undo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.undo.call(this);\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.redo = function () {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.redo.call(this);\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {FileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n * @private\n */\n ImageEditor.prototype.save = function (type, fileName) {\n if (this.getModuleName() !== 'image-editor') {\n _super.prototype.save.call(this, type, fileName);\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n * @private\n */\n ImageEditor.prototype.saveAsBlob = function () {\n return null;\n };\n /**\n * Returns the persistence data for component.\n *\n * @returns {any}.\n * @private\n */\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ImageEditor.prototype.getLocalData = function () {\n return null;\n };\n var ImageEditor_1;\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"disabled\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"height\", void 0);\n __decorate([\n Property('Bootstrap5')\n ], ImageEditor.prototype, \"theme\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbar\", void 0);\n __decorate([\n Property()\n ], ImageEditor.prototype, \"toolbarTemplate\", void 0);\n __decorate([\n Property('100%')\n ], ImageEditor.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], ImageEditor.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], ImageEditor.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], ImageEditor.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], ImageEditor.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], ImageEditor.prototype, \"velocity\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], ImageEditor.prototype, \"enablePersistence\", void 0);\n __decorate([\n Complex({}, FinetuneSettings)\n ], ImageEditor.prototype, \"finetuneSettings\", void 0);\n __decorate([\n Property('')\n ], ImageEditor.prototype, \"signatureValue\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"zooming\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"panning\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"cropping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"rotating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"flipping\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"shapeChanging\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fileOpened\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"saved\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarCreated\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarUpdating\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"toolbarItemClicked\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"imageFiltering\", void 0);\n __decorate([\n Event()\n ], ImageEditor.prototype, \"fineTuneValueChanging\", void 0);\n ImageEditor = ImageEditor_1 = __decorate([\n NotifyPropertyChanges\n ], ImageEditor);\n return ImageEditor;\n}(SignatureBase));\nexport { ImageEditor };\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","FinetuneSettings","_super","apply","Property","ChildProperty","ImageEditor","options","element","_this","call","degree","dragCanvas","dragElement","keyHistory","flipState","mouseDownPoint","x","y","previousPoint","dragPoint","startX","startY","endX","endY","diffPoint","oldPoint","objColl","undoRedoColl","imgDataColl","strokeSettings","strokeColor","fillColor","strokeWidth","textSettings","text","fontFamily","fontSize","bold","italic","underline","tempStrokeSettings","tempTextSettings","toolbarHeight","pannStart","pannEnd","togglePan","disablePan","lastX","lastY","dragStart","factor","currFlipState","touchEndPoint","prevX","currX","prevY","currY","togglePen","currentToolbar","textStartPoints","fontSizeColl","tempKeyHistory","penDrawColl","allowDrag","textRow","activeObj","activePoint","width","height","flipObjColl","currObjType","shape","isDragging","isActiveObj","isText","isInitialText","isLine","isInitialLine","isCustomCrop","isZoomed","isFiltered","isSave","defToolbarItems","baseImgSrc","isTimer","isScreenOriented","isFirstMove","startTouches","tempTouches","adjustmentLevel","brightness","contrast","hue","opacity","saturation","blur","exposure","sharpen","bw","tempAdjustmentLevel","adjustmentValue","initialAdjustmentValue","tempAdjustmentValue","currentFilter","tempFilter","canvasFilter","sharpenedImgData","tempSharpenFilter","tempBWFilter","isBrightnessAdjusted","isInitialLoading","imageFileName","ImageEditor_1","preRender","id","getUniqueID","Browser","isDevice","classList","add","themeColl","Bootstrap5","primaryColor","secondaryColor","Bootstrap5Dark","Tailwind","TailwindDark","Fluent","FluentDark","Bootstrap4","Bootstrap","BootstrapDark","Material","MaterialDark","Fabric","FabricDark","Highcontrast","defaultLocale","Crop","ZoomIn","ZoomOut","Undo","Redo","Transform","Annotation","Finetune","Brightness","Contrast","Hue","Saturation","Opacity","Blur","Sharpen","Exposure","Filter","Default","Chrome","Cold","Warm","Grayscale","BlackAndWhite","Sepia","Invert","Text","Pen","Reset","Save","Select","RotateLeft","RotateRight","HorizontalFlip","VerticalFlip","OK","Cancel","FillColor","StrokeColor","StrokeWidth","FontFamily","FontStyle","FontSize","FontColor","Pan","Move","Load","Custom","Square","Circle","Ellipse","Rectangle","Line","Bold","Italic","BoldItalic","XSmall","Small","Medium","Large","XLarge","ABC","Browse","l10n","L10n","locale","render","initialize","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProperties","oldProperties","_i","_a","keys","cssClass","removeClass","split","addClass","disabled","unwireEvent","remove","wireEvent","style","theme","updateTheme","upperContext","strokeStyle","fillStyle","finetuneSettings","updateFinetunes","destroy","removeAttribute","concat","getAttribute","destroySubComponents","innerHTML","trigger","createToolbar","createContextualToolbar","createCanvas","updateContext","lowerContext","filter","createSpinner","defaultValue","EventHandler","document","keyDownEventHandler","keyUpEventHandler","upperCanvas","mouseDownEventHandler","mouseMoveEventHandler","mouseUpEventHandler","lowerCanvas","canvasMouseDownHandler","canvasMouseMoveHandler","canvasMouseUpHandler","touchStartHandler","findTextPoint","textBox","window","addEventListener","windowResizeHandler","bind","isIos","info","name","screen","orientation","screenOrientation","initializeFilter","setBrightness","setContrast","setHue","setSaturation","setExposure","setOpacity","setBlur","inputElement","querySelectorAll","btnElement","len","contains","getComponent","detach","select","toPascalCase","str","strArr","toLowerCase","charAt","toUpperCase","slice","join","canvasWrapper","appendChild","createElement","className","attrs","offsetHeight","inMemoryCanvas","setAttribute","offsetWidth","position","backgroundColor","display","resize","getContext","baseImg","crossorigin","cursor","inMemoryContext","isNullOrUndefined","toolbar","toolbarTemplate","toolbarTemplateFn","toolbarItems","align","type","template","Uploader","push","toolbarArea","getElementById","toolbar_1","uploadItems","selected","initToolbarItem","createBottomToolbar","Toolbar","items","created","toolbarType","clicked","defToolbarClicked","createLeftToolbarControls","clientHeight","toolbar_2","updateContextualToolbar","cType","querySelector","contextualToolbarArea","left","offsetLeft","refreshSlider","initFilterToolbarItem","renderSlider","cHt","ht","top","toolbarElem","initBottomToolbar","getMainToolbarItem","renderAnnotationBtn","renderCropBtn","renderTransformBtn","refreshOverflow","templateID","toolbarFn","templateParser","isReact","isAngular","templateColl","nodeType","renderReactTemplates","templateCompiler","trim","compile","error","getLeftToolbarItem","isOkBtn","visible","tooltipText","indexOf","prefixIcon","getConstant","tempToolbarItems","processToolbar","getRightToolbarItem","isApplyOption","getZoomToolbarItem","processSubToolbar","isToolbar","leftItem","rightItem","mainItem","zoomItem","renderSaveBtn","zoomIn","zoomOut","pan","undefined","uploadDiv","uploadElem","getElementsByTagName","uploadBtnElem","onchange","fileSelect","proxy","iconCss","drpDownBtn","DropDownButton","open","args","cancelPan","parentElement","getBoundingClientRect","splitWords","isCropSelection","refreshActiveObj","clearRect","refreshToolbar","item","freeHandDraw","drawShapeText","drawShape","updateToolbarItems","calcRatio","appendTo","cropSelect","transformSelect","imageEditorObj","getInstance","export","rotate","flip","getShapesToolbarItem","initShapesToolbarItem","createShapeColor","createShapeBtn","ColorPicker","modeSwitcher","noColor","value","showButtons","mode","change","pushActItemIntoObj","extend","pop","currentValue","hex","operation","currentObj","previousObj","redrawShape","rgba","fillDDB_1","children","toggle","inline","strokeDDB_1","background","strokeWidthItems","ratio","strokeWidthBtn","spanElem_1","drpDownBtn_1","activeBtn","textContent","parseInt","getTextToolbarItem","getFontFamilyItems","getFontSizeItems","initTextToolbarItem","createTextColor","createTextBtn","fontColor","color","temp","strokeDDB_2","setTextBoxStylesToActObj","fontNameBtn","spanElem_2","fontFamilyBtn_1","createPopupOnClick","beforeItemRender","redrawText","updateFontStyles","fontStyleBtnElem","span1Elem_1","fontStyleBtn_1","fontStyle","fontWeight","replace","applyFontStyle","fontSizeBtnElem","fontSizeSpanElem_1","fontSizes","getFontSizes","fontSizeBtn_1","textStyle","font","rows","getMaxText","measureText","parseFloat","setTextSelection","updateActiveObject","Math","round","toString","getTextAreaWidth","tempBold","tempItalic","updateObjColl","initZoomToolbarItem","contextualToolbarClicked","selEle","imageFiltering","setFilter","zoom","transform","redrawImgWithObj","setSharpness","setBlackAndWhiteFilter","j","cancelItems","okBtn","reset","unselectBtn","drawImage","selElem","crop","redrawActObj","applyActObj","callMainToolbar","sliderWrapper","slider","hdrWrapper","ej2_instances","updateAdjustment","isPreview","opacityValue","brightnessValue","values","getFilterValue","temp_1","saturate","bright","saturatePercentage","saturatePercent","getSaturationFilterValue","getDefaultFilter","setTempFilterValue","tempFilter_1","updateBrightnessFilter","autoEnablePan","tempSplitWords","setAdjustment","valueArr","setFilterValue","setSaturationFilterValue","labelWrapper","styles","min","max","getCurrAdjustmentValue","Slider","tooltip","isVisible","placement","showOn","step","setCurrAdjustmentValue","fineTuneValueChanging","finetune","isApplyBtn","isZooming","imageEditorPointsColl","topLeftCircle","clearSelection","gradient","a","applyPenDraw","tempCanvas","tempContext","lineWidth","nexP","preP","beginPath","moveTo","points","m","dx1","dx2","dy1","dy2","curP","bezierCurveTo","shift","stroke","imgData","getImageData","tempObj","index","splice","putImageData","isCropping","initPenToolbarItem","initAdjustmentToolbarItem","getAdjustmentToolbarItem","getFilterToolbarItem","getPenToolbarItem","createPenColor","createPenBtn","penColor","strokeDDB_3","spanElem_3","penStrokeWidth","getPenStroke","drpDownBtn_2","setPenStroke","createCanvasFilter","tempImageData","noFilter","ctx","chrome","cold","warm","grayscale","sepia","invert","updateCanvas","fileOpened","fileName","fileType","imageFileType","wrapperWidth","clientWidth","maxDimension","calcMaxDimension","maxWidth","maxHeight","updateInMemoryCanvas","imageOnLoad","src","onload","toBlob","blob","showSpinner","URL","createObjectURL","hideSpinner","shapeDegree","filesData","files","url","e","transformOrigin","scale","findTextTarget","getStrokeWidth","selFillElem","selStrokeElem","selTextStrokeElem","selPenStrokeElem","strokeWidthElem","fontFamilyElem","fontSizeElem","fontStyleElem","setTimer","timer","targetTouches","touches","pageX","pageY","calculateScale","endTouches","startDistance","getDistance","sqrt","preventDefault","setTimeout","currentTarget","clientX","clientY","canvasRatio","minStrokeWidth","maxStrokeWidth","velocity","mouseDownHandler","findTarget","setActivePoint","setCursor","initialDraw","updateActivePoint","drawObject","offsetTop","firstFingerX","firstFingerY","secondFingerX","secondFingerY","bbox","setPanPoints","tempObjColl","applyCurrActObj","shapeChangingArgs","beforeSave","cancel","ctrlKey","observableSaveArgs","stopImmediatePropagation","action","previousShapeSettings","currentShapeSettings","textKeyDown","offsetX","offsetY","transformedPoint","drawPanImg","String","fromCharCode","which","scrollHeight","setTextBoxWidth","adjustToScreen","redrawImg","pt","transitionArgs","startPoint","endPoint","xDiff","yDiff","xxDiff","yyDiff","translate","pt1","pt2","redraw","xform","DOMMatrix","getTransform","savedTransforms","save","restore","sx","sy","scaleNonUniform","radians","PI","dx","dy","f","m2","multiply","setTransform","DOMPoint","matrixTransform","inverse","m11","m12","m13","m14","m21","m22","m23","m24","zoomImg","clicks","zoomPoint","zoomLevel","pow","handleScroll","delta","wheelDelta","detail","p1","p2","isInside","actObj","setCursorForZoomState","floor","ceil","horTopLine","updateTextFromTextArea","widthColl","setTextBoxPos","point","setTextBoxPoints","shapeFlip","JSON","stringify","radius","border","overflow","setTextBoxHeight","textBoxTop","textBoxWidth","letterWidth","textWidth","textHeight","abs","selectInfo","shapeResizingArgs","shapeMovingArgs","updateNWPoints","updateNPoints","updateNEPoints","updateWPoints","updateEPoints","updateSWPoints","updateSPoints","updateSEPoints","percentage","prevDiffX","prevDiffY","maxText","newScale","getScaleRatio","isTextBox","maxi","maxStr","setDragLimit","lineDraw","shapeCircle","canvasDraw","selectionWidth","selectionHeight","fillRect","tempWidth","ellipse","closePath","arc","clip","drawOuterSelection","isInitialDraw","isCropCircle","getZoomShape","rect","topRightCircle","bottomLeftCircle","bottomRightCircle","fill","drawCenterCircles","obj","canvas","isCropRatio","drawCropRatio","isCrop","drawShapeObj","actPoint","isMouseMove","horCircleWidth","verCircleHeight","horBottomLine","verLeftLine","verRightLine","topCenterCircle","centerLeftCircle","centerRightCircle","bottomCenterCircle","currentShape","horLineWidth","verLineHeight","drawSquareLines","shapeLine","shapeText","drawSelection","tempLineWidth","lineTo","lineHeight","yPoint","updateActPoint","rotateText","fillText","k","horTopInnerLine","horBottomInnerLine","verLeftInnerLine","verRightInnerLine","findTargetObj","updateCursorStyles","diffX","data","currImgData","getSharpenData","getBlackAndWhiteData","flippedText","isResize","setDragDirection","calcShapeRatio","arcRadius","visibleWidth","visibleHeight","centerX","centerY","originalWidth","originalHeight","standardSize","scaleWidth","getScale","snippetArray","scaleHeight","snippetArray1","originalValue","widthRatio","heightRatio","canvasMaxWidth","canvasMaxHeight","widthScale","heightScale","cssMaxWidth","cssMaxHeight","setMaximumDimension","newWidth","newHeight","setCursorFromObj","downloadImg","href","download","body","documentElement","click","parentNode","removeChild","toSVGImg","dataUrl","toDataURL","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","toBlobFn","blobUrl","addLetter","letter","calcPrevRatio","oldWidthRatio","oldHeightRatio","textFlipDegree","redrawSelection","redrawObj","updateCurrentActiveObjPoint","currActObjIndex","oldRatio","currIndex","calcCurrPoints","isActObj","splitWords_2","proxy_1","setCenterPoints","renderWidth","renderHeight","start","tempHeight","drawPen","context","getObjDetails","shapeDetails","isPointsInRange","inRange","updateInMemoryContext","isUpdate","clearActObj","rotateMultiple","boolean","replaceBWSharpenData","tempDegree","tempFlipState","imageData","updateBWSharpness","g","dstOff","scx","scy","srcOff","wt","cx","cy","weights","side","halfSide","sw","sh","output","createImageData","dst","filterValue","colour","proxy_2","tempActObj","zoomedRotate","cssObj","getComputedStyle","imgData_1","globalCompositeOperation","blobUrl_1","globalAlpha","direction","activeObjShape","proxy_3","toolbar_11","update","isRotate","length_1","saved_1","cropShape","freehandDraw","panBtn","drawEllipse","radiusX","radiusY","isEllipse","drawLine","drawRectangle","isRectangle","drawText","selectShape","isSelected","deleteShape","getShapeSetting","getShapeSettings","shapeDetailsColl","applyImageFilter","filterOption","finetuneImage","finetuneOption","canUndo","canRedo","clear","draw","getBlob","isEmpty","load","signature","undo","redo","saveAsBlob","getLocalData","Complex","Event","NotifyPropertyChanges","SignatureBase"],"mappings":"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"}
|