@syncfusion/ej2-richtexteditor 23.2.7-52849 → 24.1.41-569781

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.
Files changed (171) hide show
  1. package/.eslintrc.json +260 -0
  2. package/CHANGELOG.md +177 -1
  3. package/dist/ej2-richtexteditor.umd.min.js +1 -1
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +2919 -1147
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +2906 -1133
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/package.json +13 -13
  10. package/src/common/config.d.ts +7 -0
  11. package/src/common/config.js +12 -1
  12. package/src/common/constant.d.ts +6 -0
  13. package/src/common/constant.js +6 -0
  14. package/src/common/interface.d.ts +12 -0
  15. package/src/common/types.d.ts +6 -0
  16. package/src/common/util.d.ts +6 -0
  17. package/src/common/util.js +61 -20
  18. package/src/editor-manager/base/constant.d.ts +6 -0
  19. package/src/editor-manager/base/constant.js +6 -0
  20. package/src/editor-manager/base/editor-manager.d.ts +5 -0
  21. package/src/editor-manager/base/editor-manager.js +59 -0
  22. package/src/editor-manager/base/interface.d.ts +8 -0
  23. package/src/editor-manager/plugin/audio.js +13 -3
  24. package/src/editor-manager/plugin/dom-node.d.ts +5 -1
  25. package/src/editor-manager/plugin/dom-node.js +169 -28
  26. package/src/editor-manager/plugin/format-painter-actions.d.ts +1 -0
  27. package/src/editor-manager/plugin/format-painter-actions.js +19 -1
  28. package/src/editor-manager/plugin/formats.d.ts +1 -0
  29. package/src/editor-manager/plugin/formats.js +38 -3
  30. package/src/editor-manager/plugin/image.js +38 -15
  31. package/src/editor-manager/plugin/inserthtml.d.ts +1 -0
  32. package/src/editor-manager/plugin/inserthtml.js +67 -7
  33. package/src/editor-manager/plugin/link.js +4 -1
  34. package/src/editor-manager/plugin/lists.js +121 -65
  35. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +3 -0
  36. package/src/editor-manager/plugin/ms-word-clean-up.js +215 -85
  37. package/src/editor-manager/plugin/nodecutter.js +2 -2
  38. package/src/editor-manager/plugin/selection-commands.d.ts +1 -0
  39. package/src/editor-manager/plugin/selection-commands.js +165 -3
  40. package/src/editor-manager/plugin/table.d.ts +0 -1
  41. package/src/editor-manager/plugin/table.js +33 -30
  42. package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
  43. package/src/editor-manager/plugin/toolbar-status.js +20 -10
  44. package/src/editor-manager/plugin/undo.d.ts +1 -0
  45. package/src/editor-manager/plugin/undo.js +21 -1
  46. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +3 -3
  47. package/src/rich-text-editor/actions/base-quick-toolbar.js +66 -15
  48. package/src/rich-text-editor/actions/base-toolbar.js +32 -34
  49. package/src/rich-text-editor/actions/color-picker.d.ts +1 -0
  50. package/src/rich-text-editor/actions/color-picker.js +13 -3
  51. package/src/rich-text-editor/actions/count.js +1 -1
  52. package/src/rich-text-editor/actions/dropdown-buttons.js +25 -4
  53. package/src/rich-text-editor/actions/emoji-picker.js +15 -6
  54. package/src/rich-text-editor/actions/enter-key.js +6 -4
  55. package/src/rich-text-editor/actions/file-manager.js +1 -1
  56. package/src/rich-text-editor/actions/format-painter.js +1 -1
  57. package/src/rich-text-editor/actions/full-screen.js +5 -4
  58. package/src/rich-text-editor/actions/html-editor.d.ts +2 -0
  59. package/src/rich-text-editor/actions/html-editor.js +127 -17
  60. package/src/rich-text-editor/actions/keyboard.js +3 -1
  61. package/src/rich-text-editor/actions/markdown-editor.js +3 -1
  62. package/src/rich-text-editor/actions/paste-clean-up.d.ts +5 -0
  63. package/src/rich-text-editor/actions/paste-clean-up.js +156 -28
  64. package/src/rich-text-editor/actions/quick-toolbar.d.ts +7 -0
  65. package/src/rich-text-editor/actions/quick-toolbar.js +45 -11
  66. package/src/rich-text-editor/actions/resize.js +2 -1
  67. package/src/rich-text-editor/actions/toolbar-action.js +1 -1
  68. package/src/rich-text-editor/actions/toolbar.d.ts +3 -3
  69. package/src/rich-text-editor/actions/toolbar.js +35 -96
  70. package/src/rich-text-editor/base/classes.d.ts +5 -5
  71. package/src/rich-text-editor/base/classes.js +5 -5
  72. package/src/rich-text-editor/base/constant.d.ts +46 -1
  73. package/src/rich-text-editor/base/constant.js +215 -1
  74. package/src/rich-text-editor/base/interface.d.ts +47 -3
  75. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +3 -3
  76. package/src/rich-text-editor/base/rich-text-editor.d.ts +16 -4
  77. package/src/rich-text-editor/base/rich-text-editor.js +196 -100
  78. package/src/rich-text-editor/base/util.d.ts +4 -0
  79. package/src/rich-text-editor/base/util.js +57 -5
  80. package/src/rich-text-editor/formatter/formatter.js +15 -4
  81. package/src/rich-text-editor/models/default-locale.js +31 -25
  82. package/src/rich-text-editor/models/items.js +3 -3
  83. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +1 -1
  84. package/src/rich-text-editor/models/toolbar-settings.d.ts +1 -1
  85. package/src/rich-text-editor/models/toolbar-settings.js +1 -1
  86. package/src/rich-text-editor/renderer/audio-module.d.ts +1 -0
  87. package/src/rich-text-editor/renderer/audio-module.js +13 -0
  88. package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -0
  89. package/src/rich-text-editor/renderer/dialog-renderer.js +22 -2
  90. package/src/rich-text-editor/renderer/iframe-content-renderer.js +2 -1
  91. package/src/rich-text-editor/renderer/image-module.d.ts +9 -1
  92. package/src/rich-text-editor/renderer/image-module.js +244 -212
  93. package/src/rich-text-editor/renderer/link-module.js +53 -24
  94. package/src/rich-text-editor/renderer/table-module.d.ts +10 -1
  95. package/src/rich-text-editor/renderer/table-module.js +330 -165
  96. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +4 -6
  97. package/src/rich-text-editor/renderer/toolbar-renderer.js +105 -106
  98. package/src/rich-text-editor/renderer/video-module.d.ts +3 -0
  99. package/src/rich-text-editor/renderer/video-module.js +61 -34
  100. package/src/rich-text-editor/renderer/view-source.d.ts +1 -0
  101. package/src/rich-text-editor/renderer/view-source.js +15 -5
  102. package/src/selection/selection.js +3 -0
  103. package/styles/bootstrap-dark.css +345 -99
  104. package/styles/bootstrap.css +353 -108
  105. package/styles/bootstrap4.css +337 -95
  106. package/styles/bootstrap5-dark.css +343 -96
  107. package/styles/bootstrap5.css +343 -96
  108. package/styles/fabric-dark.css +331 -89
  109. package/styles/fabric.css +332 -90
  110. package/styles/fluent-dark.css +342 -92
  111. package/styles/fluent.css +342 -92
  112. package/styles/highcontrast-light.css +331 -89
  113. package/styles/highcontrast.css +335 -90
  114. package/styles/material-dark.css +337 -90
  115. package/styles/material.css +337 -90
  116. package/styles/material3-dark.css +347 -99
  117. package/styles/material3.css +347 -99
  118. package/styles/rich-text-editor/_bds-definition.scss +279 -0
  119. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +14 -10
  120. package/styles/rich-text-editor/_bootstrap-definition.scss +20 -17
  121. package/styles/rich-text-editor/_bootstrap4-definition.scss +11 -7
  122. package/styles/rich-text-editor/_bootstrap5-definition.scss +8 -4
  123. package/styles/rich-text-editor/_fabric-dark-definition.scss +6 -2
  124. package/styles/rich-text-editor/_fabric-definition.scss +7 -3
  125. package/styles/rich-text-editor/_fluent-definition.scss +9 -5
  126. package/styles/rich-text-editor/_fusionnew-definition.scss +7 -3
  127. package/styles/rich-text-editor/_highcontrast-definition.scss +7 -3
  128. package/styles/rich-text-editor/_highcontrast-light-definition.scss +6 -2
  129. package/styles/rich-text-editor/_layout.scss +208 -31
  130. package/styles/rich-text-editor/_material-dark-definition.scss +6 -2
  131. package/styles/rich-text-editor/_material-definition.scss +6 -2
  132. package/styles/rich-text-editor/_material3-definition.scss +16 -12
  133. package/styles/rich-text-editor/_tailwind-definition.scss +25 -21
  134. package/styles/rich-text-editor/_theme.scss +93 -24
  135. package/styles/rich-text-editor/bootstrap-dark.css +345 -99
  136. package/styles/rich-text-editor/bootstrap.css +353 -108
  137. package/styles/rich-text-editor/bootstrap4.css +337 -95
  138. package/styles/rich-text-editor/bootstrap5-dark.css +343 -96
  139. package/styles/rich-text-editor/bootstrap5.css +343 -96
  140. package/styles/rich-text-editor/fabric-dark.css +331 -89
  141. package/styles/rich-text-editor/fabric.css +332 -90
  142. package/styles/rich-text-editor/fluent-dark.css +342 -92
  143. package/styles/rich-text-editor/fluent.css +342 -92
  144. package/styles/rich-text-editor/highcontrast-light.css +331 -89
  145. package/styles/rich-text-editor/highcontrast.css +335 -90
  146. package/styles/rich-text-editor/icons/_bds.scss +348 -0
  147. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +4 -4
  148. package/styles/rich-text-editor/icons/_bootstrap.scss +4 -4
  149. package/styles/rich-text-editor/icons/_bootstrap4.scss +4 -4
  150. package/styles/rich-text-editor/icons/_bootstrap5.scss +4 -4
  151. package/styles/rich-text-editor/icons/_fabric-dark.scss +4 -4
  152. package/styles/rich-text-editor/icons/_fabric.scss +4 -4
  153. package/styles/rich-text-editor/icons/_fluent.scss +4 -4
  154. package/styles/rich-text-editor/icons/_fusionnew.scss +3 -3
  155. package/styles/rich-text-editor/icons/_highcontrast-light.scss +4 -4
  156. package/styles/rich-text-editor/icons/_highcontrast.scss +4 -4
  157. package/styles/rich-text-editor/icons/_material-dark.scss +4 -4
  158. package/styles/rich-text-editor/icons/_material.scss +4 -4
  159. package/styles/rich-text-editor/icons/_material3.scss +4 -4
  160. package/styles/rich-text-editor/icons/_tailwind.scss +4 -4
  161. package/styles/rich-text-editor/material-dark.css +337 -90
  162. package/styles/rich-text-editor/material.css +337 -90
  163. package/styles/rich-text-editor/material3-dark.css +347 -99
  164. package/styles/rich-text-editor/material3.css +347 -99
  165. package/styles/rich-text-editor/tailwind-dark.css +386 -116
  166. package/styles/rich-text-editor/tailwind.css +386 -116
  167. package/styles/tailwind-dark.css +386 -116
  168. package/styles/tailwind.css +386 -116
  169. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -41
  170. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -27
  171. package/src/global.d.ts +0 -1
@@ -1,4 +1,4 @@
1
- import { addClass, detach, EventHandler, isNullOrUndefined, select, Ajax, formatUnit } from '@syncfusion/ej2-base';
1
+ import { addClass, detach, EventHandler, select, Ajax, formatUnit } from '@syncfusion/ej2-base';
2
2
  import { Browser, closest, removeClass, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';
3
3
  import * as events from '../base/constant';
4
4
  import * as classes from '../base/classes';
@@ -8,6 +8,7 @@ import { Button, CheckBox } from '@syncfusion/ej2-buttons';
8
8
  import { RenderType } from '../base/enum';
9
9
  import { dispatchEvent, parseHtml, hasClass, convertToBlob } from '../base/util';
10
10
  import { isIDevice } from '../../common/util';
11
+ import { imageResizeFactor } from '../../common/config';
11
12
  /**
12
13
  * `Image` module is used to handle image actions.
13
14
  */
@@ -17,7 +18,6 @@ var Image = /** @class */ (function () {
17
18
  this.isAllowedTypes = true;
18
19
  this.pageX = null;
19
20
  this.pageY = null;
20
- this.mouseX = null;
21
21
  this.deletedImg = [];
22
22
  this.parent = parent;
23
23
  this.rteID = parent.element.id;
@@ -87,7 +87,7 @@ var Image = /** @class */ (function () {
87
87
  dropElement.removeEventListener('dragstart', this.dragStart.bind(this), true);
88
88
  dropElement.removeEventListener('dragenter', this.dragEnter.bind(this), true);
89
89
  dropElement.removeEventListener('dragover', this.dragOver.bind(this), true);
90
- if (!isNullOrUndefined(this.contentModule)) {
90
+ if (!isNOU(this.contentModule)) {
91
91
  EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.imageClick);
92
92
  this.parent.formatter.editorManager.observer.off(events.checkUndo, this.undoStack);
93
93
  if (this.parent.insertImageSettings.resize) {
@@ -100,7 +100,7 @@ var Image = /** @class */ (function () {
100
100
  };
101
101
  Image.prototype.updateCss = function (currentObj, e) {
102
102
  if (currentObj && e.cssClass) {
103
- if (isNullOrUndefined(e.oldCssClass)) {
103
+ if (isNOU(e.oldCssClass)) {
104
104
  currentObj.setProperties({ cssClass: (currentObj.cssClass + ' ' + e.cssClass).trim() });
105
105
  }
106
106
  else {
@@ -111,7 +111,7 @@ var Image = /** @class */ (function () {
111
111
  // eslint-disable-next-line @typescript-eslint/tslint/config
112
112
  Image.prototype.setCssClass = function (e) {
113
113
  if (this.popupObj && e.cssClass) {
114
- if (isNullOrUndefined(e.oldCssClass)) {
114
+ if (isNOU(e.oldCssClass)) {
115
115
  addClass([this.popupObj.element], e.cssClass);
116
116
  }
117
117
  else {
@@ -175,11 +175,6 @@ var Image = /** @class */ (function () {
175
175
  }
176
176
  var args = { event: e, requestType: 'images' };
177
177
  this.parent.trigger(events.resizeStop, args);
178
- /* eslint-disable */
179
- var pageX = this.getPointX(e);
180
- var pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +
181
- this.parent.element.getBoundingClientRect().top + e.clientY : e.pageY;
182
- /* eslint-enable */
183
178
  this.parent.formatter.editorManager.observer.on(events.checkUndo, this.undoStack, this);
184
179
  this.parent.formatter.saveData();
185
180
  };
@@ -210,17 +205,15 @@ var Image = /** @class */ (function () {
210
205
  if (this.quickToolObj) {
211
206
  this.quickToolObj.imageQTBar.hidePopup();
212
207
  }
213
- if (target.classList.contains('e-rte-topLeft')) {
214
- this.resizeBtnStat.topLeft = true;
215
- }
216
- if (target.classList.contains('e-rte-topRight')) {
217
- this.resizeBtnStat.topRight = true;
218
- }
219
- if (target.classList.contains('e-rte-botLeft')) {
220
- this.resizeBtnStat.botLeft = true;
221
- }
222
- if (target.classList.contains('e-rte-botRight')) {
223
- this.resizeBtnStat.botRight = true;
208
+ var handlers = ['topLeft', 'topRight', 'botLeft', 'botRight'];
209
+ for (var i = 0; i < handlers.length; i++) {
210
+ var handler = handlers[i];
211
+ if (target.classList.contains('e-rte-' + handler)) {
212
+ this.resizeBtnStat[handler] = true;
213
+ this.currentResizeHandler = handler;
214
+ this.aspectRatio = this.findAspectRatio(this.imgEle);
215
+ break; // Exit the loop once a match is found
216
+ }
224
217
  }
225
218
  if (Browser.isDevice && this.contentModule.getEditPanel().contains(this.imgResizeDiv) &&
226
219
  !this.imgResizeDiv.classList.contains('e-mob-span')) {
@@ -234,6 +227,7 @@ var Image = /** @class */ (function () {
234
227
  }
235
228
  });
236
229
  }
230
+ EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);
237
231
  EventHandler.add(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd, this);
238
232
  }
239
233
  };
@@ -265,18 +259,18 @@ var Image = /** @class */ (function () {
265
259
  this.resizeBtnInit();
266
260
  this.imgEle = e;
267
261
  addClass([this.imgEle], 'e-resize');
268
- this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize' + ' ' + this.parent.cssClass, id: this.rteID + '_imgResize' });
262
+ this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize' + this.parent.getCssClass(true), id: this.rteID + '_imgResize' });
269
263
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
270
- className: 'e-rte-imageboxmark e-rte-topLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
264
+ className: 'e-rte-imageboxmark e-rte-topLeft' + this.parent.getCssClass(true), styles: 'cursor: nwse-resize'
271
265
  }));
272
266
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
273
- className: 'e-rte-imageboxmark e-rte-topRight' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
267
+ className: 'e-rte-imageboxmark e-rte-topRight' + this.parent.getCssClass(true), styles: 'cursor: nesw-resize'
274
268
  }));
275
269
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
276
- className: 'e-rte-imageboxmark e-rte-botLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
270
+ className: 'e-rte-imageboxmark e-rte-botLeft' + this.parent.getCssClass(true), styles: 'cursor: nesw-resize'
277
271
  }));
278
272
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
279
- className: 'e-rte-imageboxmark e-rte-botRight' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
273
+ className: 'e-rte-imageboxmark e-rte-botRight' + this.parent.getCssClass(true), styles: 'cursor: nwse-resize'
280
274
  }));
281
275
  if (Browser.isDevice) {
282
276
  addClass([this.imgResizeDiv], 'e-mob-rte');
@@ -285,7 +279,6 @@ var Image = /** @class */ (function () {
285
279
  this.imgResizePos(e, this.imgResizeDiv);
286
280
  this.resizeImgDupPos(e);
287
281
  this.contentModule.getEditPanel().appendChild(this.imgResizeDiv);
288
- EventHandler.add(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing, this);
289
282
  };
290
283
  Image.prototype.getPointX = function (e) {
291
284
  if (e.touches && e.touches.length) {
@@ -351,89 +344,80 @@ var Image = /** @class */ (function () {
351
344
  };
352
345
  }
353
346
  };
354
- Image.prototype.setAspectRatio = function (img, expectedX, expectedY, e) {
355
- if (isNullOrUndefined(img.width)) {
347
+ Image.prototype.setAspectRatio = function (img, expectedX, expectedY) {
348
+ if (isNOU(img.width)) {
356
349
  return;
357
350
  }
358
- // eslint-disable-next-line security/detect-unsafe-regex
359
- var width = img.style.width !== '' ? img.style.width.match(/^\d+(\.\d*)?%$/g) ? parseFloat(img.style.width) :
360
- parseInt(img.style.width, 10) : img.width;
361
- var height = img.style.height !== '' ? parseInt(img.style.height, 10) : img.height;
362
- if (width > height) {
363
- img.style.minWidth = this.parent.insertImageSettings.minWidth === 0 ? '20px' : formatUnit(this.parent.insertImageSettings.minWidth);
364
- if (this.parent.insertImageSettings.resizeByPercent) {
365
- if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {
366
- var original = img.offsetWidth + this.mouseX;
367
- var finalWidthByPerc = (original / img.offsetWidth) * (parseFloat(img.style.width).toString() === 'NaN' ? (img.offsetWidth / (parseFloat(getComputedStyle(this.parent.element).width)) * 100) : parseFloat(img.style.width));
368
- img.style.width = ((finalWidthByPerc > 3) ? finalWidthByPerc : 3) + '%';
351
+ var width = img.width;
352
+ var height = img.height;
353
+ var sameHeightWidth = (width === height);
354
+ var factor = this.parent.insertImageSettings.resizeByPercent ? '%' : 'px';
355
+ var emptyStyleDimension = (img.style.width === '' && img.style.height === '');
356
+ if (!sameHeightWidth && !emptyStyleDimension) {
357
+ if (img.style.width !== '' && img.style.height !== '') {
358
+ if (this.parent.insertImageSettings.resizeByPercent) {
359
+ this.setImageWidth(img, expectedX, factor);
360
+ this.removeImageHeight(img);
369
361
  }
370
362
  else {
371
- img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';
363
+ this.setImageWidth(img, expectedX, factor);
364
+ this.setImageHeight(img, expectedY, factor);
372
365
  }
373
- img.style.height = null;
374
- img.removeAttribute('height');
375
- }
376
- else if (img.style.width === '' && img.style.height !== '') {
377
- img.style.height = expectedY + 'px';
378
- }
379
- else if (img.style.width !== '' && img.style.height === '') {
380
- var currentWidth = ((width / height * expectedY) + width / height) <
381
- (this.parent.inputElement.getBoundingClientRect().right - 32) ?
382
- ((width / height * expectedY) + width / height) : (this.parent.inputElement.getBoundingClientRect().right - 32);
383
- img.style.width = currentWidth.toString() + 'px';
384
- img.style.height = expectedY + 'px';
385
366
  }
386
367
  else if (img.style.width !== '') {
387
- var currentWidth = (width / height * expectedY) < (this.parent.inputElement.getBoundingClientRect().right - 32) ?
388
- (width / height * expectedY) : (this.parent.inputElement.getBoundingClientRect().right - 32);
389
- img.style.width = currentWidth + 'px';
390
- img.style.height = expectedY + 'px';
391
- }
392
- else {
393
- if (this.parent.iframeSettings.enable) {
394
- img.setAttribute('width', (img.width + this.mouseX).toString());
368
+ if (this.parent.insertImageSettings.resizeByPercent) {
369
+ this.setImageWidth(img, expectedX, factor);
370
+ this.removeImageHeight(img);
395
371
  }
396
372
  else {
397
- var currentWidth = img.offsetWidth === 0 ? img.width + this.mouseX + parseInt(img.style.outlineWidth.split('p')[0], 10) : img.offsetWidth + this.mouseX;
398
- img.setAttribute('width', (currentWidth).toString());
373
+ this.setImageWidth(img, expectedX, factor);
399
374
  }
400
375
  }
401
- }
402
- else if (height > width) {
403
- if (this.parent.insertImageSettings.resizeByPercent) {
404
- if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {
405
- var original = img.offsetWidth + this.mouseX;
406
- var finalWidthByPerc = (original / img.offsetWidth) * (parseFloat(img.style.width).toString() === 'NaN' ?
407
- (img.offsetWidth / (parseFloat(getComputedStyle(this.parent.element).width)) * 100) :
408
- parseFloat(img.style.width));
409
- img.style.width = ((finalWidthByPerc > 3) ? finalWidthByPerc : 3) + '%';
376
+ else if (img.style.height !== '') {
377
+ if (this.parent.insertImageSettings.resizeByPercent) {
378
+ this.setImageWidth(img, expectedX, factor);
379
+ this.removeImageHeight(img);
410
380
  }
411
381
  else {
412
- img.style.width = this.pixToPerc((expectedX / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';
382
+ this.setImageHeight(img, expectedY, factor);
413
383
  }
414
- img.style.height = null;
415
- img.removeAttribute('height');
416
- }
417
- else if (img.style.width !== '') {
418
- img.style.width = expectedX + 'px';
419
- img.style.height = (height / width * expectedX) + 'px';
420
- }
421
- else {
422
- img.setAttribute('width', this.resizeBtnStat.botRight ? (this.getPointX(e.event) - img.getBoundingClientRect().left).toString() : expectedX.toString());
423
384
  }
424
385
  }
425
386
  else {
387
+ this.setImageWidth(img, expectedX, factor);
426
388
  if (this.parent.insertImageSettings.resizeByPercent) {
427
- img.style.width = this.pixToPerc(expectedX, (img.previousElementSibling || img.parentElement)) + '%';
428
- img.style.height = null;
429
- img.removeAttribute('height');
389
+ this.removeImageHeight(img);
430
390
  }
431
391
  else {
432
- img.style.width = expectedX + 'px';
433
- img.style.height = expectedX + 'px';
392
+ this.setImageHeight(img, expectedY, factor);
434
393
  }
435
394
  }
436
395
  };
396
+ Image.prototype.setImageWidth = function (img, value, suffix) {
397
+ img.style.width = this.getImageDimension(value, img) + suffix;
398
+ if (!this.parent.insertImageSettings.resizeByPercent) {
399
+ img.setAttribute('width', value.toString());
400
+ }
401
+ };
402
+ Image.prototype.setImageHeight = function (img, value, suffix) {
403
+ img.style.height = this.getImageDimension(value, img) + suffix;
404
+ if (!this.parent.insertImageSettings.resizeByPercent) {
405
+ img.setAttribute('height', value.toString());
406
+ }
407
+ };
408
+ Image.prototype.removeImageHeight = function (img) {
409
+ img.style.height = '';
410
+ img.removeAttribute('height');
411
+ };
412
+ Image.prototype.getImageDimension = function (value, img) {
413
+ if (this.parent.insertImageSettings.resizeByPercent) {
414
+ var rootElem = img.parentElement || img.previousElementSibling;
415
+ return this.pixToPerc(value, rootElem);
416
+ }
417
+ else {
418
+ return value;
419
+ }
420
+ };
437
421
  Image.prototype.pixToPerc = function (expected, parentEle) {
438
422
  return expected / parseFloat(getComputedStyle(parentEle).width) * 100;
439
423
  };
@@ -456,10 +440,9 @@ var Image = /** @class */ (function () {
456
440
  return;
457
441
  }
458
442
  _this.imgEle.parentElement.style.cursor = 'pointer';
459
- _this.setAspectRatio(_this.imgEle, parseInt(width, 10), parseInt(height, 10), args);
443
+ _this.setAspectRatio(_this.imgEle, parseInt(width, 10), parseInt(height, 10));
460
444
  _this.resizeImgDupPos(_this.imgEle);
461
445
  _this.imgResizePos(_this.imgEle, _this.imgResizeDiv);
462
- _this.parent.setContentHeight('', false);
463
446
  }
464
447
  });
465
448
  };
@@ -468,35 +451,37 @@ var Image = /** @class */ (function () {
468
451
  this.cancelResizeAction();
469
452
  return;
470
453
  }
471
- if (this.imgEle.offsetWidth >= this.parent.getInsertImgMaxWidth()) {
472
- this.imgEle.style.maxHeight = this.imgEle.offsetHeight + 'px';
473
- }
474
- else if (isNOU(this.parent.insertImageSettings.maxHeight)) {
475
- this.imgEle.style.maxHeight = '';
476
- }
477
- this.imgEle.style.maxWidth = this.parent.getInsertImgMaxWidth() + 'px';
478
- var pageX = this.getPointX(e);
479
- var pageY = this.getPointY(e);
480
- var mouseX = (this.resizeBtnStat.botLeft || this.resizeBtnStat.topLeft) ? -(pageX - this.pageX) : (pageX - this.pageX);
481
- var mouseY = (this.resizeBtnStat.botLeft || this.resizeBtnStat.topLeft) ? -(pageY - this.pageY) : (pageY - this.pageY);
482
- var width = parseInt(this.imgDupPos.width, 10) + mouseX;
483
- var height = parseInt(this.imgDupPos.height, 10) + mouseY;
484
- this.mouseX = mouseX;
485
- this.pageX = pageX;
486
- this.pageY = pageY;
487
- if (this.resizeBtnStat.botRight) {
488
- this.imgDupMouseMove(width + 'px', height + 'px', e);
489
- }
490
- else if (this.resizeBtnStat.botLeft) {
491
- this.imgDupMouseMove(width + 'px', height + 'px', e);
492
- }
493
- else if (this.resizeBtnStat.topRight) {
494
- this.imgDupMouseMove(width + 'px', height + 'px', e);
495
- }
496
- else if (this.resizeBtnStat.topLeft) {
454
+ if (this.resizeBtnStat.botRight || this.resizeBtnStat.botLeft || this.resizeBtnStat.topRight || this.resizeBtnStat.topLeft) {
455
+ var pageX = this.getPointX(e);
456
+ var pageY = this.getPointY(e);
457
+ var resizeFactor = this.getResizeFactor(this.currentResizeHandler);
458
+ var diffX = (pageX - this.pageX);
459
+ var diffY = (pageY - this.pageY);
460
+ var currentWidth = this.imgEle.clientWidth;
461
+ var currentHeight = this.imgEle.clientHeight;
462
+ var width = diffX * resizeFactor[0] + currentWidth;
463
+ var height = diffY * resizeFactor[1] + currentHeight;
464
+ width = (width < 16) ? 16 : width;
465
+ height = (height < 16) ? 16 : height;
466
+ if (Math.abs(diffX) > Math.abs(diffY)) {
467
+ height = Math.round(width / this.aspectRatio);
468
+ width = Math.round(height * this.aspectRatio);
469
+ }
470
+ else {
471
+ width = Math.round(height * this.aspectRatio);
472
+ height = Math.round(width / this.aspectRatio);
473
+ }
474
+ this.pageX = pageX;
475
+ this.pageY = pageY;
497
476
  this.imgDupMouseMove(width + 'px', height + 'px', e);
498
477
  }
499
478
  };
479
+ Image.prototype.getResizeFactor = function (value) {
480
+ return imageResizeFactor[value];
481
+ };
482
+ Image.prototype.findAspectRatio = function (image) {
483
+ return image.clientWidth / image.clientHeight;
484
+ };
500
485
  Image.prototype.cancelResizeAction = function () {
501
486
  EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);
502
487
  EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);
@@ -506,6 +491,8 @@ var Image = /** @class */ (function () {
506
491
  this.imgResizeDiv = null;
507
492
  this.pageX = null;
508
493
  this.pageY = null;
494
+ this.currentResizeHandler = null;
495
+ this.aspectRatio = null;
509
496
  }
510
497
  };
511
498
  Image.prototype.resizeImgDupPos = function (e) {
@@ -516,6 +503,8 @@ var Image = /** @class */ (function () {
516
503
  };
517
504
  };
518
505
  Image.prototype.resizeBtnInit = function () {
506
+ this.aspectRatio = null;
507
+ this.currentResizeHandler = null;
519
508
  return this.resizeBtnStat = { botLeft: false, botRight: false, topRight: false, topLeft: false };
520
509
  };
521
510
  Image.prototype.onToolbarAction = function (args) {
@@ -588,7 +577,7 @@ var Image = /** @class */ (function () {
588
577
  });
589
578
  if (this.quickToolObj && document.body.contains(this.quickToolObj.imageQTBar.element)) {
590
579
  this.quickToolObj.imageQTBar.hidePopup();
591
- if (!isNullOrUndefined(e.selectParent)) {
580
+ if (!isNOU(e.selectParent)) {
592
581
  removeClass([e.selectParent[0]], 'e-img-focus');
593
582
  }
594
583
  }
@@ -628,7 +617,7 @@ var Image = /** @class */ (function () {
628
617
  this.checkImageDel(range);
629
618
  }
630
619
  }
631
- if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection) &&
620
+ if (!isNOU(this.parent.formatter.editorManager.nodeSelection) &&
632
621
  originalEvent.code !== 'KeyK') {
633
622
  range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
634
623
  selectNodeEle = this.parent.formatter.editorManager.nodeSelection.getNodeCollection(range);
@@ -645,11 +634,13 @@ var Image = /** @class */ (function () {
645
634
  }
646
635
  }
647
636
  if (originalEvent.ctrlKey && (originalEvent.keyCode === 89 || originalEvent.keyCode === 90)) {
648
- this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });
637
+ if (this.parent.editorMode !== 'Markdown') {
638
+ this.undoStack({ subCommand: (originalEvent.keyCode === 90 ? 'undo' : 'redo') });
639
+ }
649
640
  }
650
641
  if (originalEvent.keyCode === 8 || originalEvent.keyCode === 46) {
651
642
  if (selectNodeEle && selectNodeEle[0].nodeName === 'IMG' && selectNodeEle.length < 1) {
652
- if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection)) {
643
+ if (!isNOU(this.parent.formatter.editorManager.nodeSelection)) {
653
644
  save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());
654
645
  }
655
646
  originalEvent.preventDefault();
@@ -671,7 +662,7 @@ var Image = /** @class */ (function () {
671
662
  }
672
663
  switch (originalEvent.action) {
673
664
  case 'escape':
674
- if (!isNullOrUndefined(this.dialogObj)) {
665
+ if (!isNOU(this.dialogObj)) {
675
666
  this.dialogObj.close();
676
667
  }
677
668
  break;
@@ -719,13 +710,21 @@ var Image = /** @class */ (function () {
719
710
  }
720
711
  break;
721
712
  case 'insert-image':
722
- if (!isNullOrUndefined(this.parent.formatter.editorManager.nodeSelection)) {
713
+ if (!isNOU(this.parent.formatter.editorManager.nodeSelection)) {
723
714
  save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());
724
715
  }
725
716
  this.openDialog(true, originalEvent, save, selectNodeEle, selectParentEle);
726
717
  originalEvent.preventDefault();
727
718
  break;
728
719
  }
720
+ if (originalEvent.ctrlKey && originalEvent.key === 'a') {
721
+ this.handleSelectAll();
722
+ }
723
+ };
724
+ Image.prototype.handleSelectAll = function () {
725
+ this.cancelResizeAction();
726
+ var imgFocusNodes = this.parent.inputElement.querySelectorAll('.' + classes.CLS_IMG_FOCUS);
727
+ removeClass(imgFocusNodes, classes.CLS_IMG_FOCUS);
729
728
  };
730
729
  Image.prototype.openDialog = function (isInternal, event, selection, ele, parentEle) {
731
730
  var range;
@@ -771,7 +770,7 @@ var Image = /** @class */ (function () {
771
770
  };
772
771
  Image.prototype.showDialog = function () {
773
772
  this.openDialog(false);
774
- this.setCssClass({ cssClass: this.parent.cssClass });
773
+ this.setCssClass({ cssClass: this.parent.getCssClass() });
775
774
  };
776
775
  Image.prototype.closeDialog = function () {
777
776
  if (this.dialogObj) {
@@ -869,8 +868,8 @@ var Image = /** @class */ (function () {
869
868
  };
870
869
  Image.prototype.showImageQuickToolbar = function (e) {
871
870
  var _this = this;
872
- if (e.type !== 'Images' || isNullOrUndefined(this.parent.quickToolbarModule)
873
- || isNullOrUndefined(this.parent.quickToolbarModule.imageQTBar) || isNullOrUndefined(e.args)) {
871
+ if (e.type !== 'Images' || isNOU(this.parent.quickToolbarModule)
872
+ || isNOU(this.parent.quickToolbarModule.imageQTBar) || isNOU(e.args)) {
874
873
  return;
875
874
  }
876
875
  this.quickToolObj = this.parent.quickToolbarModule;
@@ -895,15 +894,17 @@ var Image = /** @class */ (function () {
895
894
  _this.parent.formatter.editorManager.nodeSelection.Clear(_this.contentModule.getDocument());
896
895
  _this.parent.formatter.editorManager.nodeSelection.setSelectionContents(_this.contentModule.getDocument(), target);
897
896
  _this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);
897
+ _this.resizeStart(e.args, target);
898
898
  }, 400);
899
899
  }
900
900
  else {
901
- this.quickToolObj.imageQTBar.showPopup(args.pageX, pageY, target);
901
+ var coordinates = target.getBoundingClientRect();
902
+ this.quickToolObj.imageQTBar.showPopup(coordinates.left, coordinates.top, target, 'Image');
902
903
  }
903
904
  }
904
905
  };
905
906
  Image.prototype.hideImageQuickToolbar = function () {
906
- if (!isNullOrUndefined(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {
907
+ if (!isNOU(this.contentModule.getEditPanel().querySelector('.e-img-focus'))) {
907
908
  removeClass([this.contentModule.getEditPanel().querySelector('.e-img-focus')], 'e-img-focus');
908
909
  if (this.quickToolObj && this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {
909
910
  this.quickToolObj.imageQTBar.hidePopup();
@@ -918,7 +919,7 @@ var Image = /** @class */ (function () {
918
919
  var args = e.args;
919
920
  var showOnRightClick = this.parent.quickToolbarSettings.showOnRightClick;
920
921
  if (args.which === 2 || (showOnRightClick && args.which === 1) || (!showOnRightClick && args.which === 3)) {
921
- if ((showOnRightClick && args.which === 1) && !isNullOrUndefined(args.target) &&
922
+ if ((showOnRightClick && args.which === 1) && !isNOU(args.target) &&
922
923
  args.target.tagName === 'IMG') {
923
924
  this.parent.formatter.editorManager.nodeSelection.Clear(this.contentModule.getDocument());
924
925
  this.parent.formatter.editorManager.nodeSelection.setSelectionContents(this.contentModule.getDocument(), args.target);
@@ -978,20 +979,20 @@ var Image = /** @class */ (function () {
978
979
  return;
979
980
  }
980
981
  this.imagDialog(e);
981
- if (!isNullOrUndefined(this.dialogObj)) {
982
- var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' + ' ' + this.parent.cssClass });
982
+ if (!isNOU(this.dialogObj)) {
983
+ var linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' + this.parent.getCssClass(true) });
983
984
  var linkUrl = this.i10n.getConstant('linkurl');
984
- var content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
985
- '<input type="text" data-role ="none" class="e-input e-img-link' + ' ' + this.parent.cssClass + '" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
985
+ var content = '<div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
986
+ '<input type="text" data-role ="none" class="e-input e-img-link' + this.parent.getCssClass(true) + '" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
986
987
  '<div class="e-rte-label"></div>' + '<div class="e-rte-field">' +
987
- '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>';
988
+ '<input type="checkbox" class="e-rte-linkTarget' + this.parent.getCssClass(true) + '" data-role ="none"></div>';
988
989
  var contentElem = parseHtml(content);
989
990
  linkWrap.appendChild(contentElem);
990
991
  var linkTarget = linkWrap.querySelector('.e-rte-linkTarget');
991
992
  var inputLink = linkWrap.querySelector('.e-img-link');
992
993
  var linkOpenLabel = this.i10n.getConstant('linkOpenInNewWindow');
993
994
  this.checkBoxObj = new CheckBox({
994
- label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass,
995
+ label: linkOpenLabel, checked: true, enableRtl: this.parent.enableRtl, cssClass: this.parent.getCssClass(),
995
996
  change: function (e) {
996
997
  if (e.checked) {
997
998
  target_1 = '_blank';
@@ -1005,14 +1006,14 @@ var Image = /** @class */ (function () {
1005
1006
  this.checkBoxObj.createElement = this.parent.createElement;
1006
1007
  this.checkBoxObj.appendTo(linkTarget);
1007
1008
  var target_1 = this.checkBoxObj.checked ? '_blank' : null;
1009
+ var imageLabel = this.checkBoxObj.checked ? this.i10n.getConstant('imageLinkAriaLabel') : null;
1008
1010
  var linkUpdate = this.i10n.getConstant('dialogUpdate');
1009
1011
  var linkargs_1 = {
1010
1012
  args: e.args,
1011
1013
  selfImage: this, selection: e.selection,
1012
- selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1
1014
+ selectNode: e.selectNode, selectParent: e.selectParent, link: inputLink, target: target_1, ariaLabel: imageLabel
1013
1015
  };
1014
1016
  this.dialogObj.setProperties({
1015
- height: 'inherit',
1016
1017
  width: '290px',
1017
1018
  header: this.parent.localeObj.getConstant('imageInsertLinkHeader'),
1018
1019
  content: linkWrap,
@@ -1022,7 +1023,7 @@ var Image = /** @class */ (function () {
1022
1023
  _this.insertlink(linkargs_1);
1023
1024
  },
1024
1025
  buttonModel: {
1025
- content: linkUpdate, cssClass: 'e-flat e-update-link' + ' ' + this.parent.cssClass, isPrimary: true
1026
+ content: linkUpdate, cssClass: 'e-flat e-update-link' + this.parent.getCssClass(true), isPrimary: true
1026
1027
  }
1027
1028
  }],
1028
1029
  cssClass: this.dialogObj.cssClass + ' e-rte-img-link-dialog'
@@ -1030,7 +1031,7 @@ var Image = /** @class */ (function () {
1030
1031
  if (!isNOU(this.parent.cssClass)) {
1031
1032
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
1032
1033
  }
1033
- if (!isNullOrUndefined(inputDetails)) {
1034
+ if (!isNOU(inputDetails)) {
1034
1035
  inputLink.value = inputDetails.url;
1035
1036
  // eslint-disable-next-line
1036
1037
  (inputDetails.target) ? this.checkBoxObj.checked = true : this.checkBoxObj.checked = false;
@@ -1047,14 +1048,14 @@ var Image = /** @class */ (function () {
1047
1048
  }
1048
1049
  this.imagDialog(e);
1049
1050
  var altText = this.i10n.getConstant('altText');
1050
- if (!isNullOrUndefined(this.dialogObj)) {
1051
- var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' + ' ' + this.parent.cssClass });
1051
+ if (!isNOU(this.dialogObj)) {
1052
+ var altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' + this.parent.getCssClass(true) });
1052
1053
  var altHeader = this.i10n.getConstant('alternateHeader');
1053
1054
  var linkUpdate = this.i10n.getConstant('dialogUpdate');
1054
1055
  var getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :
1055
1056
  e.selectNode[0].getAttribute('alt');
1056
- var content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
1057
- '<input type="text" spellcheck="false" class="e-input e-img-alt' + ' ' + this.parent.cssClass + '" placeholder="' + altText + '"/>' +
1057
+ var content = '<div class="e-rte-field' + this.parent.getCssClass(true) + '">' +
1058
+ '<input type="text" spellcheck="false" class="e-input e-img-alt' + this.parent.getCssClass(true) + '" placeholder="' + altText + '"/>' +
1058
1059
  '</div>';
1059
1060
  var contentElem = parseHtml(content);
1060
1061
  contentElem.querySelector('input').setAttribute('value', getAlt);
@@ -1065,14 +1066,14 @@ var Image = /** @class */ (function () {
1065
1066
  alt: inputAlt
1066
1067
  };
1067
1068
  this.dialogObj.setProperties({
1068
- height: 'inherit', width: '290px', header: altHeader, content: altWrap,
1069
+ width: '290px', header: altHeader, content: altWrap,
1069
1070
  buttons: [{
1070
1071
  // eslint-disable-next-line
1071
1072
  click: function (e) {
1072
1073
  _this.insertAlt(altArgs_1);
1073
1074
  },
1074
1075
  buttonModel: {
1075
- content: linkUpdate, cssClass: 'e-flat e-update-alt' + ' ' + this.parent.cssClass, isPrimary: true
1076
+ content: linkUpdate, cssClass: 'e-flat e-update-alt' + this.parent.getCssClass(true), isPrimary: true
1076
1077
  }
1077
1078
  }],
1078
1079
  cssClass: this.dialogObj.cssClass + ' e-rte-img-alt-dialog'
@@ -1085,7 +1086,7 @@ var Image = /** @class */ (function () {
1085
1086
  }
1086
1087
  };
1087
1088
  Image.prototype.insertAlt = function (e) {
1088
- if (!isNullOrUndefined(e.alt)) {
1089
+ if (!isNOU(e.alt)) {
1089
1090
  e.selection.restore();
1090
1091
  if (this.parent.formatter.getUndoRedoStack().length === 0) {
1091
1092
  this.parent.formatter.saveData();
@@ -1124,14 +1125,14 @@ var Image = /** @class */ (function () {
1124
1125
  }
1125
1126
  if (e.selectNode[0].parentElement.nodeName === 'A') {
1126
1127
  proxy.parent.formatter.process(proxy.parent, e.args, e.args, {
1127
- url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,
1128
+ url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, ariaLabel: proxy.checkBoxObj.checked ? this.i10n.getConstant('imageLinkAriaLabel') : null, selectNode: e.selectNode,
1128
1129
  subCommand: e.args.item.subCommand
1129
1130
  });
1130
1131
  proxy.dialogObj.hide({ returnValue: true });
1131
1132
  return;
1132
1133
  }
1133
1134
  proxy.parent.formatter.process(proxy.parent, e.args, e.args, {
1134
- url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, selectNode: e.selectNode,
1135
+ url: url, target: proxy.checkBoxObj.checked ? '_blank' : null, ariaLabel: proxy.checkBoxObj.checked ? this.i10n.getConstant('imageLinkAriaLabel') : null, selectNode: e.selectNode,
1135
1136
  subCommand: e.args.item.subCommand, selection: e.selection
1136
1137
  });
1137
1138
  var captionEle = closest(e.selectNode[0], '.e-img-caption');
@@ -1159,7 +1160,29 @@ var Image = /** @class */ (function () {
1159
1160
  if (this.parent.formatter.getUndoRedoStack().length === 0) {
1160
1161
  this.parent.formatter.saveData();
1161
1162
  }
1162
- e.selection.restore();
1163
+ var restoreStartElement = e.selection.range.startContainer;
1164
+ if (e.selection.range.startContainer.nodeName === 'SPAN' &&
1165
+ restoreStartElement.classList.contains('e-img-wrap') &&
1166
+ restoreStartElement.parentElement.classList.contains('e-img-caption')) {
1167
+ restoreStartElement = restoreStartElement.parentElement;
1168
+ if (!isNOU(restoreStartElement.previousSibling)) {
1169
+ var lastNode = restoreStartElement.previousSibling;
1170
+ while (lastNode.nodeName !== '#text' && lastNode.nodeName !== 'BR') {
1171
+ lastNode = lastNode.lastChild;
1172
+ }
1173
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), lastNode, lastNode.nodeName !== 'BR' ? lastNode.textContent.length : 0);
1174
+ }
1175
+ else if (!isNOU(restoreStartElement.nextSibling)) {
1176
+ var firstNode = restoreStartElement.nextSibling;
1177
+ while (firstNode.nodeName !== '#text' && firstNode.nodeName !== 'BR') {
1178
+ firstNode = firstNode.firstChild;
1179
+ }
1180
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.contentModule.getDocument(), firstNode, 0);
1181
+ }
1182
+ }
1183
+ else {
1184
+ e.selection.restore();
1185
+ }
1163
1186
  if (this.contentModule.getEditPanel().querySelector('.e-img-resize')) {
1164
1187
  this.removeResizeEle();
1165
1188
  }
@@ -1173,7 +1196,7 @@ var Image = /** @class */ (function () {
1173
1196
  this.quickToolObj.imageQTBar.hidePopup();
1174
1197
  }
1175
1198
  this.cancelResizeAction();
1176
- if (isNullOrUndefined(keyCode)) {
1199
+ if (isNOU(keyCode)) {
1177
1200
  this.parent.trigger(events.afterImageDelete, args);
1178
1201
  }
1179
1202
  };
@@ -1227,7 +1250,7 @@ var Image = /** @class */ (function () {
1227
1250
  addClass([selectNode], 'e-rte-image');
1228
1251
  var subCommand = (e.args.item) ?
1229
1252
  e.args.item.subCommand : 'Caption';
1230
- if (!isNullOrUndefined(closest(selectNode, '.' + classes.CLS_CAPTION))) {
1253
+ if (!isNOU(closest(selectNode, '.' + classes.CLS_CAPTION))) {
1231
1254
  detach(closest(selectNode, '.' + classes.CLS_CAPTION));
1232
1255
  if (Browser.isIE) {
1233
1256
  this.contentModule.getEditPanel().focus();
@@ -1242,11 +1265,11 @@ var Image = /** @class */ (function () {
1242
1265
  }
1243
1266
  else {
1244
1267
  this.captionEle = this.parent.createElement('span', {
1245
- className: classes.CLS_CAPTION + ' ' + classes.CLS_RTE_CAPTION + ' ' + this.parent.cssClass,
1268
+ className: classes.CLS_CAPTION + ' ' + classes.CLS_RTE_CAPTION + this.parent.getCssClass(true),
1246
1269
  attrs: { contenteditable: 'false', draggable: 'false', style: 'width:' + this.parent.insertImageSettings.width }
1247
1270
  });
1248
- var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' + ' ' + this.parent.cssClass });
1249
- var imgInner = this.parent.createElement('span', { className: 'e-img-inner' + ' ' + this.parent.cssClass,
1271
+ var imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' + this.parent.getCssClass(true) });
1272
+ var imgInner = this.parent.createElement('span', { className: 'e-img-inner' + this.parent.getCssClass(true),
1250
1273
  attrs: { contenteditable: 'true' } });
1251
1274
  var parent_1 = e.selectNode[0].parentElement;
1252
1275
  if (parent_1.tagName === 'A') {
@@ -1286,20 +1309,20 @@ var Image = /** @class */ (function () {
1286
1309
  return;
1287
1310
  }
1288
1311
  this.imagDialog(e);
1289
- if (!isNullOrUndefined(this.dialogObj)) {
1312
+ if (!isNOU(this.dialogObj)) {
1290
1313
  var imgSizeHeader = this.i10n.getConstant('imageSizeHeader');
1291
1314
  var linkUpdate = this.i10n.getConstant('dialogUpdate');
1292
1315
  var dialogContent = this.imgsizeInput(e);
1293
1316
  var selectObj_1 = { args: e.args, selfImage: this, selection: e.selection, selectNode: e.selectNode };
1294
1317
  this.dialogObj.setProperties({
1295
- height: (Browser.isDevice) ? '300px' : 'inherit', width: '290px', header: imgSizeHeader, content: dialogContent,
1318
+ width: '290px', header: imgSizeHeader, content: dialogContent,
1296
1319
  buttons: [{
1297
1320
  // eslint-disable-next-line
1298
1321
  click: function (e) {
1299
1322
  _this.insertSize(selectObj_1);
1300
1323
  },
1301
1324
  buttonModel: {
1302
- content: linkUpdate, cssClass: 'e-flat e-update-size' + ' ' + this.parent.cssClass, isPrimary: true
1325
+ content: linkUpdate, cssClass: 'e-flat e-update-size' + this.parent.getCssClass(true), isPrimary: true
1303
1326
  }
1304
1327
  }],
1305
1328
  cssClass: this.dialogObj.cssClass + ' e-rte-img-size-dialog'
@@ -1345,7 +1368,7 @@ var Image = /** @class */ (function () {
1345
1368
  this.dialogObj.hide({ returnValue: true });
1346
1369
  return;
1347
1370
  }
1348
- var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_image' });
1371
+ var imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog' + this.parent.getCssClass(true), id: this.rteID + '_image' });
1349
1372
  this.parent.element.appendChild(imgDialog);
1350
1373
  var imgInsert = this.i10n.getConstant('dialogInsert');
1351
1374
  var imglinkCancel = this.i10n.getConstant('dialogCancel');
@@ -1354,26 +1377,26 @@ var Image = /** @class */ (function () {
1354
1377
  var selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };
1355
1378
  var dialogModel = {
1356
1379
  header: imgHeader,
1357
- cssClass: classes.CLS_RTE_ELEMENTS + ' ' + this.parent.cssClass,
1380
+ cssClass: classes.CLS_RTE_ELEMENTS + this.parent.getCssClass(true),
1358
1381
  enableRtl: this.parent.enableRtl,
1359
1382
  locale: this.parent.locale,
1360
1383
  showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px',
1361
1384
  isModal: Browser.isDevice,
1362
1385
  buttons: [{
1363
1386
  click: this.insertImageUrl.bind(selectObj),
1364
- buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + ' ' + this.parent.cssClass, isPrimary: true, disabled: true }
1387
+ buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + this.parent.getCssClass(true), isPrimary: true, disabled: this.parent.editorMode === 'Markdown' ? false : true }
1365
1388
  },
1366
1389
  {
1367
1390
  click: function (e) {
1368
1391
  _this.cancelDialog(e);
1369
1392
  },
1370
- buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: imglinkCancel }
1393
+ buttonModel: { cssClass: 'e-flat e-cancel' + this.parent.getCssClass(true), content: imglinkCancel }
1371
1394
  }],
1372
1395
  target: (Browser.isDevice) ? document.body : this.parent.element,
1373
1396
  animationSettings: { effect: 'None' },
1374
1397
  close: function (event) {
1375
1398
  if (_this.isImgUploaded) {
1376
- _this.uploadObj.removing();
1399
+ _this.uploadObj.remove();
1377
1400
  }
1378
1401
  _this.parent.isBlur = false;
1379
1402
  if (event && event.event.returnValue) {
@@ -1390,12 +1413,12 @@ var Image = /** @class */ (function () {
1390
1413
  _this.dialogObj = null;
1391
1414
  }
1392
1415
  };
1393
- var dialogContent = this.parent.createElement('div', { className: 'e-img-content' + ' ' + this.parent.cssClass });
1394
- if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
1416
+ var dialogContent = this.parent.createElement('div', { className: 'e-img-content' + this.parent.getCssClass(true) });
1417
+ if ((!isNOU(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
1395
1418
  || this.parent.editorMode === 'HTML') {
1396
1419
  dialogContent.appendChild(this.imgUpload(e));
1397
1420
  }
1398
- var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' + ' ' + this.parent.cssClass });
1421
+ var linkHeader = this.parent.createElement('div', { className: 'e-linkheader' + this.parent.getCssClass(true) });
1399
1422
  var linkHeaderText = this.i10n.getConstant('imageLinkHeader');
1400
1423
  if (this.parent.editorMode === 'HTML') {
1401
1424
  linkHeader.innerHTML = linkHeaderText;
@@ -1415,7 +1438,7 @@ var Image = /** @class */ (function () {
1415
1438
  this.dialogObj = this.dialogRenderObj.render(dialogModel);
1416
1439
  this.dialogObj.createElement = this.parent.createElement;
1417
1440
  this.dialogObj.appendTo(imgDialog);
1418
- if (isNullOrUndefined(this.dialogObj)) {
1441
+ if (isNOU(this.dialogObj)) {
1419
1442
  return;
1420
1443
  }
1421
1444
  if (e.selectNode && e.selectNode[0].nodeName === 'IMG' && (e.name === 'insertImage')) {
@@ -1425,7 +1448,7 @@ var Image = /** @class */ (function () {
1425
1448
  if (this.quickToolObj) {
1426
1449
  if (this.quickToolObj.imageQTBar && document.body.contains(this.quickToolObj.imageQTBar.element)) {
1427
1450
  this.quickToolObj.imageQTBar.hidePopup();
1428
- if (!isNullOrUndefined(e.selectParent)) {
1451
+ if (!isNOU(e.selectParent)) {
1429
1452
  removeClass([e.selectParent[0]], 'e-img-focus');
1430
1453
  }
1431
1454
  }
@@ -1441,9 +1464,6 @@ var Image = /** @class */ (function () {
1441
1464
  Image.prototype.cancelDialog = function (e) {
1442
1465
  this.parent.isBlur = false;
1443
1466
  this.dialogObj.hide({ returnValue: true });
1444
- if (this.isImgUploaded) {
1445
- this.uploadObj.removing();
1446
- }
1447
1467
  };
1448
1468
  Image.prototype.onDocumentClick = function (e) {
1449
1469
  var target = e.target;
@@ -1456,7 +1476,7 @@ var Image = /** @class */ (function () {
1456
1476
  if (target.nodeName !== '#document') {
1457
1477
  this.parent.currentTarget = e.target;
1458
1478
  }
1459
- if (!isNullOrUndefined(this.dialogObj) && ((
1479
+ if (!isNOU(this.dialogObj) && ((
1460
1480
  // eslint-disable-next-line
1461
1481
  !closest(target, '[id=' + "'" + this.dialogObj.element.id + "'" + ']') && this.parent.toolbarSettings.enable && this.parent.getToolbarElement() &&
1462
1482
  !this.parent.getToolbarElement().contains(e.target)) ||
@@ -1467,6 +1487,7 @@ var Image = /** @class */ (function () {
1467
1487
  if (e.offsetX > e.target.clientWidth || e.offsetY > e.target.clientHeight) {
1468
1488
  }
1469
1489
  else {
1490
+ this.parent.notify(events.documentClickClosedBy, { closedBy: "outside click" });
1470
1491
  this.dialogObj.hide({ returnValue: true });
1471
1492
  this.parent.isBlur = true;
1472
1493
  dispatchEvent(this.parent.element, 'focusout');
@@ -1495,7 +1516,6 @@ var Image = /** @class */ (function () {
1495
1516
  for (var i = 0; i < items.length; i++) {
1496
1517
  removeClass([items[i]], 'e-img-focus');
1497
1518
  removeClass([items[i]], 'e-resize');
1498
- items[i].style.maxWidth = '';
1499
1519
  }
1500
1520
  }
1501
1521
  };
@@ -1509,13 +1529,12 @@ var Image = /** @class */ (function () {
1509
1529
  this.cancelResizeAction();
1510
1530
  }
1511
1531
  };
1512
- // eslint-disable-next-line
1513
1532
  Image.prototype.imageUrlPopup = function (e) {
1514
1533
  var _this = this;
1515
- var imgUrl = this.parent.createElement('div', { className: 'imgUrl' + ' ' + this.parent.cssClass });
1534
+ var imgUrl = this.parent.createElement('div', { className: 'imgUrl' + this.parent.getCssClass(true) });
1516
1535
  var placeUrl = this.i10n.getConstant('imageUrl');
1517
1536
  this.inputUrl = this.parent.createElement('input', {
1518
- className: 'e-input e-img-url' + ' ' + this.parent.cssClass,
1537
+ className: 'e-input e-img-url' + this.parent.getCssClass(true),
1519
1538
  attrs: { placeholder: placeUrl, spellcheck: 'false', 'aria-label': this.i10n.getConstant('imageLinkHeader') }
1520
1539
  });
1521
1540
  this.inputUrl.addEventListener('input', function () {
@@ -1528,6 +1547,10 @@ var Image = /** @class */ (function () {
1528
1547
  }
1529
1548
  }
1530
1549
  });
1550
+ if (e.selectNode && e.selectNode[0].nodeName === 'IMG') {
1551
+ var regex = new RegExp(/([^\S]|^)(((https?\:\/\/)|(www\.))(\S+))/gi);
1552
+ this.inputUrl.value = e.selectNode[0].src.match(regex) ? e.selectNode[0].src : '';
1553
+ }
1531
1554
  imgUrl.appendChild(this.inputUrl);
1532
1555
  return imgUrl;
1533
1556
  };
@@ -1536,10 +1559,13 @@ var Image = /** @class */ (function () {
1536
1559
  var proxy = this.selfImage;
1537
1560
  proxy.isImgUploaded = false;
1538
1561
  var url = proxy.inputUrl.value;
1562
+ if (proxy.parent.editorMode === 'Markdown' && url === '') {
1563
+ url = 'http://';
1564
+ }
1539
1565
  if (proxy.parent.formatter.getUndoRedoStack().length === 0) {
1540
1566
  proxy.parent.formatter.saveData();
1541
1567
  }
1542
- if (!isNullOrUndefined(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {
1568
+ if (!isNOU(proxy.uploadUrl) && proxy.uploadUrl.url !== '') {
1543
1569
  proxy.uploadUrl.cssClass = (proxy.parent.insertImageSettings.display === 'inline' ?
1544
1570
  classes.CLS_IMGINLINE : classes.CLS_IMGBREAK);
1545
1571
  proxy.dialogObj.hide({ returnValue: false });
@@ -1551,7 +1577,7 @@ var Image = /** @class */ (function () {
1551
1577
  }
1552
1578
  }
1553
1579
  else if (url !== '') {
1554
- if (proxy.parent.editorMode === 'HTML' && isNullOrUndefined(closest(
1580
+ if (proxy.parent.editorMode === 'HTML' && isNOU(closest(
1555
1581
  // eslint-disable-next-line
1556
1582
  this.selection.range.startContainer.parentNode, '[id=' + "'" + proxy.contentModule.getPanel().id + "'" + ']'))) {
1557
1583
  proxy.contentModule.getEditPanel().focus();
@@ -1560,7 +1586,7 @@ var Image = /** @class */ (function () {
1560
1586
  this.selectParent = proxy.parent.formatter.editorManager.nodeSelection.getParentNodeCollection(range);
1561
1587
  }
1562
1588
  var regex = /[\w-]+.(jpg|png|jpeg|gif)/g;
1563
- var matchUrl = (!isNullOrUndefined(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';
1589
+ var matchUrl = (!isNOU(url.match(regex)) && proxy.parent.editorMode === 'HTML') ? url.match(regex)[0] : '';
1564
1590
  var value = {
1565
1591
  cssClass: (proxy.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),
1566
1592
  url: url, selection: this.selection, altText: matchUrl,
@@ -1582,19 +1608,25 @@ var Image = /** @class */ (function () {
1582
1608
  var selectNode = e.selectNode[0];
1583
1609
  var imgHeight = this.i10n.getConstant('imageHeight');
1584
1610
  var imgWidth = this.i10n.getConstant('imageWidth');
1585
- var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' + ' ' + this.parent.cssClass });
1586
- var widthVal = isNullOrUndefined(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||
1587
- selectNode.style.width !== '') ? selectNode.style.width : !isNullOrUndefined(this.changedWidthValue) ?
1611
+ var imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' + this.parent.getCssClass(true) });
1612
+ var widthVal = isNOU(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||
1613
+ selectNode.style.width !== '') ? selectNode.style.width : !isNOU(this.changedWidthValue) ?
1588
1614
  this.changedWidthValue : (parseInt(selectNode.getClientRects()[0].width.toString(), 10)).toString();
1589
- var heightVal = isNullOrUndefined(this.changedHeightValue) && (selectNode.style.height.toString() === 'auto' ||
1590
- selectNode.style.height !== '') ? selectNode.style.height : !isNullOrUndefined(this.changedHeightValue) ?
1615
+ var heightVal = isNOU(this.changedHeightValue) && (selectNode.style.height.toString() === 'auto' ||
1616
+ selectNode.style.height !== '') ? selectNode.style.height : !isNOU(this.changedHeightValue) ?
1591
1617
  this.changedHeightValue : (parseInt(selectNode.getClientRects()[0].height.toString(), 10)).toString();
1618
+ if (selectNode.style.width === '') {
1619
+ widthVal = 'auto';
1620
+ }
1621
+ if (selectNode.style.height === '') {
1622
+ heightVal = 'auto';
1623
+ }
1592
1624
  this.changedWidthValue = null;
1593
1625
  this.changedHeightValue = null;
1594
- var content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + imgWidth +
1595
- '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" id="imgwidth" class="e-img-width' + ' ' + this.parent.cssClass + '/></div>' +
1596
- '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
1597
- '<input type="text" id="imgheight" class="e-img-height' + ' ' + this.parent.cssClass + '"/></div>';
1626
+ var content = '<div class="e-rte-label' + this.parent.getCssClass(true) + '"><label>' + imgWidth +
1627
+ '</label></div><div class="e-rte-field' + this.parent.getCssClass(true) + '"><input type="text" id="imgwidth" class="e-img-width' + this.parent.getCssClass(true) + '"/></div>' +
1628
+ '<div class="e-rte-label' + this.parent.getCssClass(true) + '">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field' + this.parent.getCssClass(true) + '"> ' +
1629
+ '<input type="text" id="imgheight" class="e-img-height' + this.parent.getCssClass(true) + '"/></div>';
1598
1630
  var contentElem = parseHtml(content);
1599
1631
  contentElem.getElementById('imgwidth').setAttribute('value', widthVal);
1600
1632
  contentElem.getElementById('imgheight').setAttribute('value', heightVal);
@@ -1602,7 +1634,7 @@ var Image = /** @class */ (function () {
1602
1634
  this.widthNum = new TextBox({
1603
1635
  value: formatUnit(widthVal),
1604
1636
  enableRtl: this.parent.enableRtl,
1605
- cssClass: this.parent.cssClass,
1637
+ cssClass: this.parent.getCssClass(),
1606
1638
  input: function (e) {
1607
1639
  _this.inputWidthValue = formatUnit(_this.inputValue(e.value));
1608
1640
  }
@@ -1612,7 +1644,7 @@ var Image = /** @class */ (function () {
1612
1644
  this.heightNum = new TextBox({
1613
1645
  value: formatUnit(heightVal),
1614
1646
  enableRtl: this.parent.enableRtl,
1615
- cssClass: this.parent.cssClass,
1647
+ cssClass: this.parent.getCssClass(),
1616
1648
  input: function (e) {
1617
1649
  _this.inputHeightValue = formatUnit(_this.inputValue(e.value));
1618
1650
  }
@@ -1652,10 +1684,10 @@ var Image = /** @class */ (function () {
1652
1684
  };
1653
1685
  Image.prototype.insertImage = function (e) {
1654
1686
  this.imagDialog(e);
1655
- if (!isNullOrUndefined(this.dialogObj)) {
1687
+ if (!isNOU(this.dialogObj)) {
1656
1688
  this.dialogObj.element.style.maxHeight = 'inherit';
1657
1689
  var dialogContent = this.dialogObj.element.querySelector('.e-img-content');
1658
- if (((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
1690
+ if (((!isNOU(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
1659
1691
  || this.parent.editorMode === 'HTML')) {
1660
1692
  document.getElementById(this.rteID + '_insertImage').focus();
1661
1693
  }
@@ -1671,7 +1703,7 @@ var Image = /** @class */ (function () {
1671
1703
  // eslint-disable-next-line
1672
1704
  var proxy = this;
1673
1705
  var iframe = proxy.parent.iframeSettings.enable;
1674
- if (proxy.parent.editorMode === 'HTML' && (!iframe && isNullOrUndefined(closest(e.selection.range.startContainer.parentNode, '[id='
1706
+ if (proxy.parent.editorMode === 'HTML' && (!iframe && isNOU(closest(e.selection.range.startContainer.parentNode, '[id='
1675
1707
  // eslint-disable-next-line
1676
1708
  + "'" + this.parent.contentModule.getPanel().id + "'" + ']'))
1677
1709
  || (iframe && !hasClass(e.selection.range.startContainer.parentNode.ownerDocument.querySelector('body'), 'e-lib')))) {
@@ -1684,16 +1716,16 @@ var Image = /** @class */ (function () {
1684
1716
  save = e.selection;
1685
1717
  selectParent = e.selectParent;
1686
1718
  }
1687
- var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' + ' ' + this.parent.cssClass });
1719
+ var uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' + this.parent.getCssClass(true) });
1688
1720
  var deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');
1689
1721
  var imgUpMsg = this.i10n.getConstant('imageUploadMessage');
1690
- var span = this.parent.createElement('span', { className: 'e-droptext' + ' ' + this.parent.cssClass });
1722
+ var span = this.parent.createElement('span', { className: 'e-droptext' + this.parent.getCssClass(true) });
1691
1723
  var spanMsg = this.parent.createElement('span', {
1692
- className: 'e-rte-upload-text' + ' ' + this.parent.cssClass, innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
1724
+ className: 'e-rte-upload-text' + this.parent.getCssClass(true), innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
1693
1725
  });
1694
1726
  span.appendChild(spanMsg);
1695
1727
  var btnEle = this.parent.createElement('button', {
1696
- className: 'e-browsebtn' + ' ' + this.parent.cssClass, id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
1728
+ className: 'e-browsebtn' + this.parent.getCssClass(true), id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
1697
1729
  });
1698
1730
  span.appendChild(btnEle);
1699
1731
  uploadParentEle.appendChild(span);
@@ -1705,7 +1737,7 @@ var Image = /** @class */ (function () {
1705
1737
  var btnClick = (Browser.isDevice) ? span : btnEle;
1706
1738
  EventHandler.add(btnClick, 'click', this.fileSelect, this);
1707
1739
  var uploadEle = this.parent.createElement('input', {
1708
- id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }, className: this.parent.cssClass
1740
+ id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }, className: this.parent.getCssClass()
1709
1741
  });
1710
1742
  uploadParentEle.appendChild(uploadEle);
1711
1743
  var altText;
@@ -1713,7 +1745,7 @@ var Image = /** @class */ (function () {
1713
1745
  var filesData;
1714
1746
  this.uploadObj = new Uploader({
1715
1747
  asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, removeUrl: this.parent.insertImageSettings.removeUrl },
1716
- dropArea: span, multiple: false, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass,
1748
+ dropArea: span, multiple: false, enableRtl: this.parent.enableRtl, cssClass: this.parent.getCssClass(),
1717
1749
  allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),
1718
1750
  selected: function (e) {
1719
1751
  proxy.isImgUploaded = true;
@@ -1723,8 +1755,8 @@ var Image = /** @class */ (function () {
1723
1755
  _this.parent.trigger(events.imageSelected, selectArgs, function (selectArgs) {
1724
1756
  if (!selectArgs.cancel) {
1725
1757
  _this.checkExtension(selectArgs.filesData[0]);
1726
- altText = selectArgs.filesData[0].name;
1727
- if (_this.parent.editorMode === 'HTML' && isNullOrUndefined(_this.parent.insertImageSettings.path)) {
1758
+ altText = selectArgs.filesData[0].name.replace(/\.[a-zA-Z0-9]+$/, '');
1759
+ if (_this.parent.editorMode === 'HTML' && isNOU(_this.parent.insertImageSettings.path)) {
1728
1760
  var reader_1 = new FileReader();
1729
1761
  // eslint-disable-next-line
1730
1762
  reader_1.addEventListener('load', function (e) {
@@ -1743,8 +1775,8 @@ var Image = /** @class */ (function () {
1743
1775
  }
1744
1776
  };
1745
1777
  proxy.inputUrl.setAttribute('disabled', 'true');
1746
- if (isNullOrUndefined(proxy.parent.insertImageSettings.saveUrl) && _this.isAllowedTypes
1747
- && !isNullOrUndefined(_this.dialogObj)) {
1778
+ if (isNOU(proxy.parent.insertImageSettings.saveUrl) && _this.isAllowedTypes
1779
+ && !isNOU(_this.dialogObj)) {
1748
1780
  _this.dialogObj.getButtons(0).element.removeAttribute('disabled');
1749
1781
  }
1750
1782
  });
@@ -1763,7 +1795,7 @@ var Image = /** @class */ (function () {
1763
1795
  },
1764
1796
  success: function (e) {
1765
1797
  _this.parent.trigger(events.imageUploadSuccess, e, function (e) {
1766
- if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {
1798
+ if (!isNOU(_this.parent.insertImageSettings.path)) {
1767
1799
  var url = _this.parent.insertImageSettings.path + e.file.name;
1768
1800
  // eslint-disable-next-line
1769
1801
  var value = { url: url, selection: save };
@@ -1779,7 +1811,7 @@ var Image = /** @class */ (function () {
1779
1811
  };
1780
1812
  proxy.inputUrl.setAttribute('disabled', 'true');
1781
1813
  }
1782
- if (e.operation === 'upload' && !isNullOrUndefined(_this.dialogObj)) {
1814
+ if (e.operation === 'upload' && !isNOU(_this.dialogObj)) {
1783
1815
  _this.dialogObj.getButtons(0).element.removeAttribute('disabled');
1784
1816
  }
1785
1817
  });
@@ -1787,9 +1819,9 @@ var Image = /** @class */ (function () {
1787
1819
  failure: function (e) {
1788
1820
  _this.parent.trigger(events.imageUploadFailed, e);
1789
1821
  },
1790
- removing: function () {
1822
+ removing: function (removeEventArgs) {
1791
1823
  // eslint-disable-next-line
1792
- _this.parent.trigger(events.imageRemoving, e, function (e) {
1824
+ _this.parent.trigger(events.imageRemoving, removeEventArgs, function (e) {
1793
1825
  proxy.isImgUploaded = false;
1794
1826
  _this.dialogObj.getButtons(0).element.disabled = true;
1795
1827
  proxy.inputUrl.removeAttribute('disabled');
@@ -2078,7 +2110,7 @@ var Image = /** @class */ (function () {
2078
2110
  saveUrl: this.parent.insertImageSettings.saveUrl,
2079
2111
  removeUrl: this.parent.insertImageSettings.removeUrl
2080
2112
  },
2081
- cssClass: classes.CLS_RTE_DIALOG_UPLOAD + ' ' + this.parent.cssClass,
2113
+ cssClass: classes.CLS_RTE_DIALOG_UPLOAD + this.parent.getCssClass(true),
2082
2114
  dropArea: this.parent.element,
2083
2115
  allowedExtensions: this.parent.insertImageSettings.allowedTypes.toString(),
2084
2116
  removing: function () {
@@ -2108,10 +2140,10 @@ var Image = /** @class */ (function () {
2108
2140
  isUploading = true;
2109
2141
  _this.parent.trigger(events.imageUploading, e, function (imageUploadingArgs) {
2110
2142
  if (imageUploadingArgs.cancel) {
2111
- if (!isNullOrUndefined(imageElement)) {
2143
+ if (!isNOU(imageElement)) {
2112
2144
  detach(imageElement);
2113
2145
  }
2114
- if (!isNullOrUndefined(_this.popupObj.element)) {
2146
+ if (!isNOU(_this.popupObj.element)) {
2115
2147
  detach(_this.popupObj.element);
2116
2148
  }
2117
2149
  }
@@ -2208,7 +2240,7 @@ var Image = /** @class */ (function () {
2208
2240
  imageElement.classList.add(classes.CLS_IMG_FOCUS);
2209
2241
  e.element = imageElement;
2210
2242
  this.parent.trigger(events.imageUploadSuccess, e, function (e) {
2211
- if (!isNullOrUndefined(_this.parent.insertImageSettings.path)) {
2243
+ if (!isNOU(_this.parent.insertImageSettings.path)) {
2212
2244
  var url = _this.parent.insertImageSettings.path + e.file.name;
2213
2245
  imageElement.src = url;
2214
2246
  imageElement.setAttribute('alt', e.file.name);
@@ -2223,7 +2255,7 @@ var Image = /** @class */ (function () {
2223
2255
  };
2224
2256
  Image.prototype.imagePaste = function (args) {
2225
2257
  var _this = this;
2226
- if (args.text.length === 0 && !isNullOrUndefined(args.file)) {
2258
+ if (args.text.length === 0 && !isNOU(args.file)) {
2227
2259
  // eslint-disable-next-line
2228
2260
  var proxy_1 = this;
2229
2261
  var reader_2 = new FileReader();
@@ -2232,7 +2264,7 @@ var Image = /** @class */ (function () {
2232
2264
  reader_2.addEventListener('load', function (e) {
2233
2265
  var url = {
2234
2266
  cssClass: (proxy_1.parent.insertImageSettings.display === 'inline' ? classes.CLS_IMGINLINE : classes.CLS_IMGBREAK),
2235
- url: _this.parent.insertImageSettings.saveFormat === 'Base64' || !isNullOrUndefined(args.callBack) ?
2267
+ url: _this.parent.insertImageSettings.saveFormat === 'Base64' || !isNOU(args.callBack) ?
2236
2268
  reader_2.result : URL.createObjectURL(convertToBlob(reader_2.result)),
2237
2269
  width: {
2238
2270
  width: proxy_1.parent.insertImageSettings.width, minWidth: proxy_1.parent.insertImageSettings.minWidth,
@@ -2243,7 +2275,7 @@ var Image = /** @class */ (function () {
2243
2275
  maxHeight: proxy_1.parent.insertImageSettings.maxHeight
2244
2276
  }
2245
2277
  };
2246
- if (!isNullOrUndefined(args.callBack)) {
2278
+ if (!isNOU(args.callBack)) {
2247
2279
  args.callBack(url);
2248
2280
  return;
2249
2281
  }
@@ -2284,10 +2316,10 @@ var Image = /** @class */ (function () {
2284
2316
  */
2285
2317
  /* eslint-enable */
2286
2318
  Image.prototype.destroy = function () {
2287
- this.prevSelectedImgEle = undefined;
2288
2319
  if (isNOU(this.parent)) {
2289
2320
  return;
2290
2321
  }
2322
+ this.prevSelectedImgEle = undefined;
2291
2323
  this.removeEventListener();
2292
2324
  };
2293
2325
  Image.prototype.moduleDestroy = function () {