@syncfusion/ej2-richtexteditor 22.2.12 → 23.1.36

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 (81) hide show
  1. package/CHANGELOG.md +39 -1
  2. package/dist/ej2-richtexteditor.min.js +2 -2
  3. package/dist/ej2-richtexteditor.umd.min.js +2 -2
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +365 -263
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +365 -259
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/dist/global/ej2-richtexteditor.min.js +2 -2
  10. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +13 -13
  13. package/src/editor-manager/plugin/dom-node.js +6 -5
  14. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +2 -0
  15. package/src/editor-manager/plugin/ms-word-clean-up.js +68 -11
  16. package/src/editor-manager/plugin/table.js +1 -1
  17. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +2 -1
  18. package/src/rich-text-editor/actions/base-quick-toolbar.js +10 -6
  19. package/src/rich-text-editor/actions/emoji-picker.js +29 -14
  20. package/src/rich-text-editor/actions/enter-key.js +6 -2
  21. package/src/rich-text-editor/actions/format-painter.js +12 -6
  22. package/src/rich-text-editor/actions/html-editor.js +14 -1
  23. package/src/rich-text-editor/actions/paste-clean-up.d.ts +2 -0
  24. package/src/rich-text-editor/actions/paste-clean-up.js +63 -32
  25. package/src/rich-text-editor/actions/quick-toolbar.js +32 -2
  26. package/src/rich-text-editor/actions/toolbar.js +1 -1
  27. package/src/rich-text-editor/actions/xhtml-validation.js +1 -1
  28. package/src/rich-text-editor/base/classes.d.ts +5 -0
  29. package/src/rich-text-editor/base/classes.js +5 -0
  30. package/src/rich-text-editor/base/constant.d.ts +5 -0
  31. package/src/rich-text-editor/base/constant.js +5 -0
  32. package/src/rich-text-editor/base/enum.d.ts +4 -0
  33. package/src/rich-text-editor/base/interface.d.ts +10 -22
  34. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +1 -39
  35. package/src/rich-text-editor/base/rich-text-editor.d.ts +1 -39
  36. package/src/rich-text-editor/base/rich-text-editor.js +2 -8
  37. package/src/rich-text-editor/base/util.js +5 -1
  38. package/src/rich-text-editor/models/items.js +34 -22
  39. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +4 -5
  40. package/src/rich-text-editor/models/toolbar-settings.d.ts +4 -5
  41. package/src/rich-text-editor/models/toolbar-settings.js +1 -1
  42. package/src/rich-text-editor/renderer/audio-module.js +5 -33
  43. package/src/rich-text-editor/renderer/dialog-renderer.js +1 -1
  44. package/src/rich-text-editor/renderer/image-module.js +8 -65
  45. package/src/rich-text-editor/renderer/link-module.js +3 -0
  46. package/src/rich-text-editor/renderer/table-module.js +18 -7
  47. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +5 -1
  48. package/src/rich-text-editor/renderer/toolbar-renderer.js +28 -2
  49. package/src/rich-text-editor/renderer/video-module.js +5 -33
  50. package/src/rich-text-editor/renderer/view-source.js +1 -0
  51. package/styles/material-dark.css +0 -1
  52. package/styles/material.css +0 -1
  53. package/styles/material3-dark.css +0 -1
  54. package/styles/material3-dark.scss +1 -1
  55. package/styles/material3.css +0 -1
  56. package/styles/material3.scss +1 -1
  57. package/styles/rich-text-editor/bootstrap-dark.scss +1 -1
  58. package/styles/rich-text-editor/bootstrap.scss +1 -1
  59. package/styles/rich-text-editor/bootstrap4.scss +1 -1
  60. package/styles/rich-text-editor/bootstrap5-dark.scss +1 -1
  61. package/styles/rich-text-editor/bootstrap5.scss +1 -1
  62. package/styles/rich-text-editor/fabric-dark.scss +1 -1
  63. package/styles/rich-text-editor/fabric.scss +1 -1
  64. package/styles/rich-text-editor/fluent-dark.scss +1 -1
  65. package/styles/rich-text-editor/fluent.scss +1 -1
  66. package/styles/rich-text-editor/highcontrast-light.scss +1 -1
  67. package/styles/rich-text-editor/highcontrast.scss +1 -1
  68. package/styles/rich-text-editor/material-dark.css +0 -1
  69. package/styles/rich-text-editor/material-dark.scss +1 -1
  70. package/styles/rich-text-editor/material.css +0 -1
  71. package/styles/rich-text-editor/material.scss +1 -1
  72. package/styles/rich-text-editor/material3-dark.css +0 -1
  73. package/styles/rich-text-editor/material3-dark.scss +1 -1
  74. package/styles/rich-text-editor/material3.css +0 -1
  75. package/styles/rich-text-editor/material3.scss +1 -1
  76. package/styles/rich-text-editor/tailwind-dark.css +0 -1
  77. package/styles/rich-text-editor/tailwind-dark.scss +1 -1
  78. package/styles/rich-text-editor/tailwind.css +0 -1
  79. package/styles/rich-text-editor/tailwind.scss +1 -1
  80. package/styles/tailwind-dark.css +0 -1
  81. package/styles/tailwind.css +0 -1
@@ -739,6 +739,11 @@ const emojiPicker = 'emojiPicker';
739
739
  * @deprecated
740
740
  */
741
741
  const maximizeMinimizeClick = 'maximizeMinimizeClick';
742
+ /**
743
+ * @hidden
744
+ * @deprecated
745
+ */
746
+ const hidePopup = 'hidePopup';
742
747
  /**
743
748
  * @hidden
744
749
  * @deprecated
@@ -860,6 +865,11 @@ const CLS_QUICK_DROPDOWN = 'e-quick-dropdown';
860
865
  * @deprecated
861
866
  */
862
867
  const CLS_IMAGE_POP = 'e-rte-image-popup';
868
+ /**
869
+ * @hidden
870
+ * @deprecated
871
+ */
872
+ const CLS_TEXT_POP = 'e-rte-text-popup';
863
873
  /**
864
874
  * @hidden
865
875
  * @deprecated
@@ -2177,29 +2187,41 @@ function updateDropDownLocale(self) {
2177
2187
  });
2178
2188
  }
2179
2189
  let windowKeys = {
2180
- 'Insert Link': 'Ctrl + K',
2181
- 'Insert Image': 'Ctrl + Shift + I',
2182
- 'Create Table': 'Ctrl + Shift + E',
2183
- 'Undo': 'Ctrl + Z',
2184
- 'Redo': 'Ctrl + Y',
2185
- 'Copy': 'Ctrl + C',
2186
- 'Cut': 'Ctrl + X',
2187
- 'Paste': 'Ctrl + V',
2188
- 'Bold': 'Ctrl + B',
2189
- 'Italic': 'Ctrl + I',
2190
- 'Underline': 'Ctrl + U',
2191
- 'Strikethrough': 'Ctrl + Shift + S',
2192
- 'Upper Case': 'Ctrl + Shift + U',
2193
- 'Lower Case': 'Ctrl + Shift + L',
2194
- 'Superscript': 'Ctrl + Shift + =',
2195
- 'Subscript': 'Ctrl + =',
2196
- 'Source Code': 'Ctrl + Shift + H',
2197
- 'Maximize': 'Ctrl + Shift + F',
2190
+ 'Insert Link': 'Ctrl+K',
2191
+ 'Insert Image': 'Ctrl+Shift+I',
2192
+ 'Create Table': 'Ctrl+Shift+E',
2193
+ 'Undo': 'Ctrl+Z',
2194
+ 'Redo': 'Ctrl+Y',
2195
+ 'Copy': 'Ctrl+C',
2196
+ 'Cut': 'Ctrl+X',
2197
+ 'Paste': 'Ctrl+V',
2198
+ 'Bold': 'Ctrl+B',
2199
+ 'Italic': 'Ctrl+I',
2200
+ 'Underline': 'Ctrl+U',
2201
+ 'Strikethrough': 'Ctrl+Shift+S',
2202
+ 'Upper Case': 'Ctrl+Shift+U',
2203
+ 'Lower Case': 'Ctrl+Shift+L',
2204
+ 'Superscript': 'Ctrl+Shift+=',
2205
+ 'Subscript': 'Ctrl+=',
2206
+ 'Code View': 'Ctrl+Shift+H',
2207
+ 'Maximize': 'Ctrl+Shift+F',
2198
2208
  'Minimize': 'Esc',
2199
- 'Clear Format': 'Ctrl + Shift + R',
2200
- 'Numbered List': 'Ctrl + Shift + O',
2201
- 'Bulleted List': 'Ctrl + Alt + O',
2202
- 'Format Painter': 'Alt + Shift + C, Alt + Shift + V'
2209
+ 'Clear Format': 'Ctrl+Shift+R',
2210
+ 'Numbered List': 'Ctrl+Shift+O',
2211
+ 'Bulleted List': 'Ctrl+Alt+O',
2212
+ 'Number Format List': 'Ctrl+Shift+O',
2213
+ 'Bullet Format List': 'Ctrl+Alt+O',
2214
+ 'Insert Audio': 'Ctrl+Shift+A',
2215
+ 'Insert Video': 'Ctrl+Shift+V',
2216
+ 'Increase Indent': 'Ctrl+]',
2217
+ 'Decrease Indent': 'Ctrl+[',
2218
+ 'Decrease Fontsize': 'Ctrl+Shift+<',
2219
+ 'Increase Fontsize': 'Ctrl+Shift+>',
2220
+ 'Justify Center': 'Ctrl+E',
2221
+ 'Justify Full': 'Ctrl+J',
2222
+ 'Justify Left': 'Ctrl+L',
2223
+ 'Justify Right': 'Ctrl+R',
2224
+ 'Format Painter': 'Alt+Shift+C, Alt+Shift+V'
2203
2225
  };
2204
2226
  const defaultEmojiIcons = [{
2205
2227
  name: 'Smilies & People', code: '1F600', iconCss: 'e-emoji', icons: [{ code: '1F600', desc: 'Grinning face' },
@@ -2869,7 +2891,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2869
2891
  }
2870
2892
  }
2871
2893
  else if ((typeof data[`${key}`] === 'string' || data[`${key}`] === null) &&
2872
- getIndex(key, e.parent.toolbarSettings.items) > -1) {
2894
+ getIndex(key, e.parent.toolbarSettings.items) >= -1) {
2873
2895
  const value = ((data[`${key}`]) ? data[`${key}`] : '');
2874
2896
  let result = '';
2875
2897
  switch (key) {
@@ -2934,6 +2956,10 @@ function setToolbarStatus(e, isPopToolbar, self) {
2934
2956
  dropDown.fontSizeDropDown.dataBind();
2935
2957
  break;
2936
2958
  }
2959
+ case 'bulletFormatList':
2960
+ case 'numberFormatList': {
2961
+ removeClass([e.tbElements[j]], [CLS_ACTIVE]);
2962
+ }
2937
2963
  }
2938
2964
  }
2939
2965
  }
@@ -3298,9 +3324,13 @@ class ToolbarRenderer {
3298
3324
  * Constructor for toolbar renderer module
3299
3325
  *
3300
3326
  * @param {IRichTextEditor} parent - specifies the parent element.
3327
+ * @param {ServiceLocator} serviceLocator - specifies the serviceLocator
3301
3328
  */
3302
- constructor(parent) {
3329
+ constructor(parent, serviceLocator) {
3303
3330
  this.parent = parent;
3331
+ if (serviceLocator) {
3332
+ this.l10n = serviceLocator.getService('rteLocale');
3333
+ }
3304
3334
  this.wireEvent();
3305
3335
  }
3306
3336
  wireEvent() {
@@ -3308,7 +3338,11 @@ class ToolbarRenderer {
3308
3338
  this.parent.on(maximizeMinimizeClick, this.destroyTooltip, this);
3309
3339
  }
3310
3340
  destroyTooltip() {
3311
- this.tooltip.close();
3341
+ if (!isNullOrUndefined(document.querySelector('.e-tooltip-wrap')) && !isNullOrUndefined(document.querySelector(' [data-tooltip-id]'))) {
3342
+ const tooltipTargetEle = document.querySelector('#' + (this.parent.element).id + ' [data-tooltip-id]');
3343
+ const event = new MouseEvent('mouseleave', { bubbles: true, cancelable: true });
3344
+ tooltipTargetEle.dispatchEvent(event);
3345
+ }
3312
3346
  }
3313
3347
  unWireEvent() {
3314
3348
  this.parent.off(destroy, this.unWireEvent);
@@ -3344,6 +3378,22 @@ class ToolbarRenderer {
3344
3378
  }
3345
3379
  this.parent.notify(beforeDropDownItemRender, args);
3346
3380
  }
3381
+ tooltipBeforeRender(args) {
3382
+ if (!isNullOrUndefined(args.target.getAttribute('title'))) {
3383
+ const tooltipTarget = args.target.getAttribute('title');
3384
+ let tooltipText;
3385
+ switch (tooltipTarget) {
3386
+ case 'Minimize':
3387
+ tooltipText = this.l10n.getConstant('minimize');
3388
+ args.target.setAttribute('title', tooltipText + ' (Esc)');
3389
+ break;
3390
+ case 'Maximize':
3391
+ tooltipText = this.l10n.getConstant('maximize');
3392
+ args.target.setAttribute('title', tooltipText + ' (Ctrl+Shift+F)');
3393
+ break;
3394
+ }
3395
+ }
3396
+ }
3347
3397
  dropDownOpen(args) {
3348
3398
  if (args.element.parentElement.getAttribute('id').indexOf('TableCell') > -1 && !isNullOrUndefined(args.element.parentElement.querySelector('.e-cell-merge')) &&
3349
3399
  (!isNullOrUndefined(args.element.parentElement.querySelector('.e-cell-horizontal-split')) || !isNullOrUndefined(args.element.parentElement.querySelector('.e-cell-vertical-split')))) {
@@ -3409,6 +3459,8 @@ class ToolbarRenderer {
3409
3459
  target: '#' + this.parent.getID() + '_toolbar_wrapper [title]',
3410
3460
  showTipPointer: true,
3411
3461
  openDelay: 400,
3462
+ opensOn: 'Hover',
3463
+ beforeRender: this.tooltipBeforeRender.bind(this),
3412
3464
  cssClass: this.parent.cssClass,
3413
3465
  windowCollision: true,
3414
3466
  position: 'BottomCenter'
@@ -4754,7 +4806,7 @@ class Toolbar$2 {
4754
4806
  this.renderFactory = this.locator.getService('rendererFactory');
4755
4807
  updateDropDownLocale(this.parent);
4756
4808
  updateDropDownFontFormatLocale(this.parent);
4757
- this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent));
4809
+ this.renderFactory.addRenderer(RenderType.Toolbar, new ToolbarRenderer(this.parent, this.locator));
4758
4810
  this.toolbarRenderer = this.renderFactory.getRenderer(RenderType.Toolbar);
4759
4811
  this.baseToolbar = new BaseToolbar(this.parent, this.locator);
4760
4812
  this.addEventListener();
@@ -5926,6 +5978,9 @@ class BaseQuickToolbar {
5926
5978
  else if (args.popupType === 'Inline') {
5927
5979
  className = CLS_INLINE_POP;
5928
5980
  }
5981
+ else if (args.popupType === 'Text') {
5982
+ className = CLS_TEXT_POP;
5983
+ }
5929
5984
  else {
5930
5985
  className = '';
5931
5986
  }
@@ -6005,7 +6060,7 @@ class BaseQuickToolbar {
6005
6060
  case 'bottom': {
6006
6061
  let posY;
6007
6062
  if (viewPort === 'document') {
6008
- if (type === 'inline') {
6063
+ if (type === 'inline' || type === 'text') {
6009
6064
  posY = (e.y - e.popHeight - 10);
6010
6065
  }
6011
6066
  else {
@@ -6034,7 +6089,7 @@ class BaseQuickToolbar {
6034
6089
  break;
6035
6090
  }
6036
6091
  case 'right':
6037
- if (type === 'inline') {
6092
+ if (type === 'inline' || type === 'text') {
6038
6093
  x = window.pageXOffset + (e.windowWidth - (e.popWidth + e.bodyRightSpace + 10));
6039
6094
  }
6040
6095
  else {
@@ -6042,7 +6097,7 @@ class BaseQuickToolbar {
6042
6097
  }
6043
6098
  break;
6044
6099
  case 'left':
6045
- if (type === 'inline') {
6100
+ if (type === 'inline' || type === 'text') {
6046
6101
  x = 0;
6047
6102
  }
6048
6103
  else {
@@ -6061,11 +6116,12 @@ class BaseQuickToolbar {
6061
6116
  * @param {number} x - specifies the x value
6062
6117
  * @param {number} y - specifies the y value
6063
6118
  * @param {Element} target - specifies the element
6119
+ * @param {string} type - specifies the type
6064
6120
  * @returns {void}
6065
6121
  * @hidden
6066
6122
  * @deprecated
6067
6123
  */
6068
- showPopup(x, y, target) {
6124
+ showPopup(x, y, target, type) {
6069
6125
  const eventArgs = { popup: this.popupObj, cancel: false, targetElement: target,
6070
6126
  positionX: x, positionY: y };
6071
6127
  this.parent.trigger(beforeQuickToolbarOpen, eventArgs, (beforeQuickToolbarArgs) => {
@@ -6095,7 +6151,7 @@ class BaseQuickToolbar {
6095
6151
  editPanelTop = (cntEle) ? cntEle.scrollTop : 0;
6096
6152
  editPanelHeight = (cntEle) ? cntEle.offsetHeight : 0;
6097
6153
  }
6098
- if (!this.parent.inlineMode.enable && !closest(target, 'table')) {
6154
+ if (!this.parent.inlineMode.enable && !closest(target, 'table') && type !== 'text') {
6099
6155
  this.parent.disableToolbarItem(this.parent.toolbarSettings.items);
6100
6156
  this.parent.enableToolbarItem(['Undo', 'Redo']);
6101
6157
  }
@@ -6148,7 +6204,7 @@ class BaseQuickToolbar {
6148
6204
  if (!this.parent.inlineMode.enable) {
6149
6205
  this.checkCollision(showPopupData, 'parent', '');
6150
6206
  }
6151
- this.checkCollision(showPopupData, 'document', ((this.parent.inlineMode.enable) ? 'inline' : ''));
6207
+ this.checkCollision(showPopupData, 'document', ((this.parent.inlineMode.enable) ? 'inline' : (type === 'text') ? 'text' : ''));
6152
6208
  this.popupObj.element.classList.remove('e-popup-open');
6153
6209
  removeClass([this.element], [CLS_HIDE]);
6154
6210
  this.popupObj.show({ name: 'ZoomIn', duration: (Browser.isIE ? 250 : 400) });
@@ -6475,8 +6531,10 @@ class QuickToolbar {
6475
6531
  }
6476
6532
  this.linkQTBar = this.createQTBar('Link', 'Scrollable', this.parent.quickToolbarSettings.link, RenderType.LinkToolbar);
6477
6533
  this.renderFactory.addRenderer(RenderType.LinkToolbar, this.linkQTBar);
6478
- this.textQTBar = this.createQTBar('Text', 'Scrollable', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);
6479
- this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);
6534
+ if (!isNullOrUndefined(this.parent.quickToolbarSettings.text) && !this.parent.inlineMode.enable) {
6535
+ this.textQTBar = this.createQTBar('Text', 'MultiRow', this.parent.quickToolbarSettings.text, RenderType.TextToolbar);
6536
+ this.renderFactory.addRenderer(RenderType.TextToolbar, this.textQTBar);
6537
+ }
6480
6538
  this.imageQTBar = this.createQTBar('Image', 'MultiRow', this.parent.quickToolbarSettings.image, RenderType.ImageToolbar);
6481
6539
  this.renderFactory.addRenderer(RenderType.ImageToolbar, this.imageQTBar);
6482
6540
  this.audioQTBar = this.createQTBar('Audio', 'MultiRow', this.parent.quickToolbarSettings.audio, RenderType.AudioToolbar);
@@ -6617,6 +6675,24 @@ class QuickToolbar {
6617
6675
  }
6618
6676
  }
6619
6677
  }
6678
+ if (!isNullOrUndefined(this.textQTBar) && !isNullOrUndefined(this.parent.quickToolbarSettings.text) && !this.parent.inlineMode.enable) {
6679
+ const args = e.args.touches ?
6680
+ e.args.changedTouches[0] : e.args;
6681
+ const target = e.args.target;
6682
+ this.hideQuickToolbars();
6683
+ const parentLeft = this.parent.element.getBoundingClientRect().left;
6684
+ this.offsetX = this.parent.iframeSettings.enable ? this.parent.element.ownerDocument.documentElement.scrollLeft
6685
+ + parentLeft + args.clientX : args.pageX;
6686
+ this.offsetY = pageYOffset(args, this.parent.element, this.parent.iframeSettings.enable);
6687
+ const range = this.parent.getRange();
6688
+ if ((range.endContainer.parentElement.tagName === range.startContainer.parentElement.tagName && (range.startContainer.parentElement.tagName === 'A' && range.endContainer.parentElement.tagName === 'A')) ||
6689
+ (target.tagName === 'IMG') || (target.tagName === 'VIDEO') || (target.tagName === 'AUDIO') || (target.childNodes[0].nodeType === 1 && target.childNodes[0].classList.contains('e-rte-audio')) ||
6690
+ (this.parent.getRange().startOffset === this.parent.getRange().endOffset)) {
6691
+ return;
6692
+ }
6693
+ this.target = target;
6694
+ this.textQTBar.showPopup(this.offsetX, this.offsetY, target, 'text');
6695
+ }
6620
6696
  }
6621
6697
  keyDownHandler() {
6622
6698
  if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))
@@ -6629,6 +6705,11 @@ class QuickToolbar {
6629
6705
  && !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {
6630
6706
  this.hideInlineQTBar();
6631
6707
  }
6708
+ if (!isNullOrUndefined(this.parent.quickToolbarSettings.text)) {
6709
+ if (this.textQTBar && !hasClass(this.textQTBar.element, 'e-popup-close') && document.body.contains(this.textQTBar.element)) {
6710
+ this.textQTBar.hidePopup();
6711
+ }
6712
+ }
6632
6713
  }
6633
6714
  keyUpHandler(e) {
6634
6715
  if (this.parent.inlineMode.enable && !Browser.isDevice) {
@@ -6786,6 +6867,7 @@ class QuickToolbar {
6786
6867
  this.parent.on(keyDown, this.onKeyDown, this);
6787
6868
  this.parent.on(rtlMode, this.setRtl, this);
6788
6869
  this.parent.on(bindCssClass, this.setCssClass, this);
6870
+ this.parent.on(hidePopup, this.hideQuickToolbars, this);
6789
6871
  }
6790
6872
  onKeyDown(e) {
6791
6873
  const args = e.args;
@@ -6839,6 +6921,9 @@ class QuickToolbar {
6839
6921
  if (this.linkQTBar) {
6840
6922
  this.linkQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });
6841
6923
  }
6924
+ if (this.textQTBar) {
6925
+ this.textQTBar.quickTBarObj.toolbarObj.setProperties({ enableRtl: args.enableRtl });
6926
+ }
6842
6927
  }
6843
6928
  /**
6844
6929
  * removeEventListener
@@ -6867,6 +6952,7 @@ class QuickToolbar {
6867
6952
  this.parent.off(keyDown, this.onKeyDown);
6868
6953
  this.parent.off(rtlMode, this.setRtl);
6869
6954
  this.parent.off(bindCssClass, this.setCssClass);
6955
+ this.parent.off(hidePopup, this.hideQuickToolbars);
6870
6956
  }
6871
6957
  /**
6872
6958
  * Called internally if any of the property value changed.
@@ -11150,11 +11236,12 @@ class DOMNode {
11150
11236
  let startTextNode;
11151
11237
  let endTextNode;
11152
11238
  if (start.textContent === '' && isNullOrUndefined(end) && action !== 'tab') {
11153
- if (isNullOrUndefined(action) && save.range.startContainer.nodeType === 1 &&
11154
- save.range.startContainer.querySelectorAll('audio,video,image').length === 0) {
11155
- start.innerHTML = '<br>';
11156
- }
11157
- else if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {
11239
+ // To Do Apply Heading and Back space press in empty content.
11240
+ // if (isNOU(action) && save.range.startContainer.nodeType === 1 &&
11241
+ // (save.range.startContainer as HTMLElement).querySelectorAll('audio,video,image').length === 0) {
11242
+ // start.innerHTML = '<br>';
11243
+ // }
11244
+ if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {
11158
11245
  start.innerHTML = '&#65279;&#65279;<br>';
11159
11246
  }
11160
11247
  else {
@@ -14887,7 +14974,7 @@ class TableCommand {
14887
14974
  calculateStyleValue(value) {
14888
14975
  let styleValue;
14889
14976
  if (typeof (value) === 'string') {
14890
- if (value.indexOf('px') || value.indexOf('%') || value.indexOf('auto')) {
14977
+ if (value.indexOf('px') >= 0 || value.indexOf('%') >= 0 || value.indexOf('auto') >= 0) {
14891
14978
  styleValue = value;
14892
14979
  }
14893
14980
  else {
@@ -17371,6 +17458,7 @@ class MsWordPaste {
17371
17458
  'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'];
17372
17459
  this.removableElements = ['o:p', 'style'];
17373
17460
  this.listContents = [];
17461
+ this.cropImageDimensions = [];
17374
17462
  this.parent = parent;
17375
17463
  this.addEventListener();
17376
17464
  }
@@ -17420,20 +17508,20 @@ class MsWordPaste {
17420
17508
  }
17421
17509
  }
17422
17510
  }
17423
- e.callBack(elm.innerHTML);
17511
+ e.callBack(elm.innerHTML, this.cropImageDimensions);
17424
17512
  }
17425
17513
  else {
17426
17514
  e.callBack(elm.innerHTML);
17427
17515
  }
17428
17516
  }
17429
17517
  cleanList(elm, listTag) {
17430
- let replacableElem = elm.querySelectorAll(listTag + ' div');
17518
+ const replacableElem = elm.querySelectorAll(listTag + ' div');
17431
17519
  for (let j = replacableElem.length - 1; j >= 0; j--) {
17432
17520
  const parentElem = replacableElem[j].parentNode;
17433
17521
  while (replacableElem[j].firstChild) {
17434
17522
  parentElem.insertBefore(replacableElem[j].firstChild, replacableElem[j]);
17435
17523
  }
17436
- let closestListElem = this.findClosestListElem(replacableElem[j]);
17524
+ const closestListElem = this.findClosestListElem(replacableElem[j]);
17437
17525
  if (closestListElem) {
17438
17526
  this.insertAfter(replacableElem[j], closestListElem);
17439
17527
  }
@@ -17488,7 +17576,8 @@ class MsWordPaste {
17488
17576
  imgElem[i].getAttribute('v:shapes').indexOf('Grafik') < 0 &&
17489
17577
  imgElem[i].getAttribute('v:shapes').toLowerCase().indexOf('image') < 0 &&
17490
17578
  imgElem[i].getAttribute('v:shapes').indexOf('Graphic') < 0 &&
17491
- imgElem[i].getAttribute('v:shapes').indexOf('_x0000_s') < 0) {
17579
+ imgElem[i].getAttribute('v:shapes').indexOf('_x0000_s') < 0 &&
17580
+ imgElem[i].getAttribute('v:shapes').indexOf('_x0000_i') < 0) {
17492
17581
  detach(imgElem[i]);
17493
17582
  }
17494
17583
  }
@@ -17505,14 +17594,36 @@ class MsWordPaste {
17505
17594
  }
17506
17595
  const hexValue = this.hexConversion(rtfData);
17507
17596
  for (let i = 0; i < hexValue.length; i++) {
17508
- base64Src.push(this.convertToBase64(hexValue[i]));
17597
+ base64Src.push({
17598
+ base64Data: !isNullOrUndefined(hexValue[i].hex) ? this.convertToBase64(hexValue[i]) : null,
17599
+ isCroppedImage: hexValue[i].isCroppedImage
17600
+ });
17601
+ if (hexValue[i].isCroppedImage) {
17602
+ this.cropImageDimensions.push({
17603
+ goalWidth: hexValue[i].goalWidth,
17604
+ goalHeight: hexValue[i].goalHeight,
17605
+ cropLength: hexValue[i].cropLength,
17606
+ cropTop: hexValue[i].cropTop,
17607
+ cropR: hexValue[i].cropR,
17608
+ cropB: hexValue[i].cropB
17609
+ });
17610
+ }
17509
17611
  }
17510
17612
  for (let i = 0; i < imgElem.length; i++) {
17511
17613
  if (imgSrc[i].match(linkRegex)) {
17512
17614
  imgElem[i].setAttribute('src', imgSrc[i]);
17513
17615
  }
17514
17616
  else {
17515
- imgElem[i].setAttribute('src', base64Src[i]);
17617
+ if (!isNullOrUndefined(base64Src[i]) && !isNullOrUndefined(base64Src[i].base64Data)) {
17618
+ imgElem[i].setAttribute('src', base64Src[i].base64Data);
17619
+ }
17620
+ else {
17621
+ imgElem[i].removeAttribute('src');
17622
+ imgElem[i].setAttribute('alt', 'Unsupported file format');
17623
+ }
17624
+ if (!isNullOrUndefined(base64Src[i]) && base64Src[i].isCroppedImage) {
17625
+ imgElem[i].classList.add('e-img-cropped');
17626
+ }
17516
17627
  }
17517
17628
  imgElem[i].setAttribute('id', 'msWordImg-' + imgName[i]);
17518
17629
  }
@@ -17589,6 +17700,13 @@ class MsWordPaste {
17589
17700
  const result = [];
17590
17701
  if (!isNullOrUndefined(fullImg)) {
17591
17702
  for (let i = 0; i < fullImg.length; i++) {
17703
+ let isCroppedImage = false;
17704
+ let goalWidth = 0;
17705
+ let goalHeight = 0;
17706
+ let cropLength = 0;
17707
+ let cropTop = 0;
17708
+ let cropR = 0;
17709
+ let cropB = 0;
17592
17710
  if (picHead.test(fullImg[i])) {
17593
17711
  if (fullImg[i].indexOf('\\pngblip') !== -1) {
17594
17712
  imgType = 'image/png';
@@ -17596,20 +17714,45 @@ class MsWordPaste {
17596
17714
  else if (fullImg[i].indexOf('\\jpegblip') !== -1) {
17597
17715
  imgType = 'image/jpeg';
17598
17716
  }
17717
+ else if (fullImg[i].indexOf('\\picprop') !== -1) {
17718
+ imgType = null;
17719
+ }
17599
17720
  else {
17600
17721
  continue;
17601
17722
  }
17723
+ isCroppedImage = this.extractCropValue('cropl', fullImg[i]) > 0 &&
17724
+ this.extractCropValue('cropt', fullImg[i]) > 0 ? true : false;
17725
+ if (isCroppedImage) {
17726
+ goalWidth = this.extractCropValue('wgoal', fullImg[i]);
17727
+ goalHeight = this.extractCropValue('hgoal', fullImg[i]);
17728
+ cropLength = this.extractCropValue('cropl', fullImg[i]);
17729
+ cropTop = this.extractCropValue('cropt', fullImg[i]);
17730
+ cropR = this.extractCropValue('cropr', fullImg[i]);
17731
+ cropB = this.extractCropValue('cropb', fullImg[i]);
17732
+ }
17602
17733
  result.push({
17603
17734
  hex: imgType ? fullImg[i].replace(picHead, '').replace(/[^\da-fA-F]/g, '') : null,
17604
- type: imgType
17735
+ type: imgType,
17736
+ isCroppedImage: isCroppedImage,
17737
+ goalWidth: goalWidth,
17738
+ goalHeight: goalHeight,
17739
+ cropLength: cropLength,
17740
+ cropTop: cropTop,
17741
+ cropR: cropR,
17742
+ cropB: cropB
17605
17743
  });
17606
17744
  }
17607
17745
  }
17608
17746
  }
17609
17747
  return result;
17610
17748
  }
17749
+ extractCropValue(crop, rtfData) {
17750
+ // eslint-disable-next-line security/detect-non-literal-regexp
17751
+ const result = new RegExp('\\\\pic' + crop + '(\\-?\\d+)\\\\').exec(rtfData.replace('\r\n\\', '\\'))[1];
17752
+ return parseInt(result, 10);
17753
+ }
17611
17754
  removeClassName(elm) {
17612
- const elmWithClass = elm.querySelectorAll('*[class]');
17755
+ const elmWithClass = elm.querySelectorAll('*[class]:not(.e-img-cropped)');
17613
17756
  for (let i = 0; i < elmWithClass.length; i++) {
17614
17757
  elmWithClass[i].removeAttribute('class');
17615
17758
  }
@@ -17946,8 +18089,10 @@ class MsWordPaste {
17946
18089
  currentListStyle = listNodes[i].getAttribute('style');
17947
18090
  }
17948
18091
  }
17949
- collection.push({ listType: type, content: tempNode, nestedLevel: level, class: currentClassName,
17950
- listStyle: currentListStyle, listStyleTypeName: listStyleType, start: startAttr, styleMarginLeft: styleMarginLeft });
18092
+ collection.push({
18093
+ listType: type, content: tempNode, nestedLevel: level, class: currentClassName,
18094
+ listStyle: currentListStyle, listStyleTypeName: listStyleType, start: startAttr, styleMarginLeft: styleMarginLeft
18095
+ });
17951
18096
  }
17952
18097
  }
17953
18098
  stNode = listNodes.shift();
@@ -18075,8 +18220,7 @@ class MsWordPaste {
18075
18220
  }
18076
18221
  else {
18077
18222
  if (collection[index].nestedLevel > pLevel && isNormalList) {
18078
- let initialNode;
18079
- initialNode = createElement(collection[index].listType);
18223
+ const initialNode = createElement(collection[index].listType);
18080
18224
  prevList = createElement('li');
18081
18225
  initialNode.appendChild(prevList);
18082
18226
  initialNode.style.listStyleType = 'none';
@@ -18163,11 +18307,11 @@ class MsWordPaste {
18163
18307
  else {
18164
18308
  //Add to support separate list which looks like same list and also to add all tags as it is inside list
18165
18309
  if (firstChild.childNodes.length > 0) {
18166
- let listIgnoreTag = firstChild.querySelectorAll('[style*="mso-list"]');
18310
+ const listIgnoreTag = firstChild.querySelectorAll('[style*="mso-list"]');
18167
18311
  for (let i = 0; i < listIgnoreTag.length; i++) {
18168
- listIgnoreTag[i].setAttribute('style', listIgnoreTag[i].getAttribute('style').replace(/\n/g, ""));
18312
+ listIgnoreTag[i].setAttribute('style', listIgnoreTag[i].getAttribute('style').replace(/\n/g, ''));
18169
18313
  }
18170
- let listOrder = firstChild.querySelector('span[style="mso-list:Ignore"]');
18314
+ const listOrder = firstChild.querySelector('span[style="mso-list:Ignore"]');
18171
18315
  if (!isNullOrUndefined(listOrder)) {
18172
18316
  this.listContents.push(listOrder.textContent.trim());
18173
18317
  detach(listOrder);
@@ -19829,7 +19973,7 @@ class XhtmlValidation {
19829
19973
  */
19830
19974
  selfEncloseValidation(currentValue, valueLength) {
19831
19975
  if (valueLength === 0 && currentValue.indexOf('table') < 0 && currentValue.indexOf('img') < 0 &&
19832
- currentValue !== '<p><br></p>' && currentValue !== '<div><br></div>' && currentValue !== '<br>') {
19976
+ currentValue.includes('&nbsp;')) {
19833
19977
  const arrayValue = currentValue.split('&nbsp;');
19834
19978
  arrayValue[arrayValue.length - 1] = '&#8203;' + arrayValue[arrayValue.length - 1];
19835
19979
  currentValue = arrayValue.join('');
@@ -20070,11 +20214,24 @@ class HtmlEditor {
20070
20214
  const currentLength = this.parent.inputElement.innerHTML.replace(regEx, '').length;
20071
20215
  let focusNode = range.startContainer;
20072
20216
  if (previousLength > currentLength && !isRootParent) {
20217
+ if (focusNode.textContent.trim().length !== 0 && focusNode.previousSibling) {
20218
+ const tempSpan = document.createElement('span');
20219
+ tempSpan.className = 'tempSpan';
20220
+ range.insertNode(tempSpan);
20221
+ }
20073
20222
  let currentChild = this.parent.inputElement.firstChild;
20074
20223
  while (!isNullOrUndefined(currentChild) && currentChild.textContent.replace(regEx, '').trim().length > 0) {
20075
20224
  currentChild.innerHTML = currentChild.innerHTML.replace(regEx, '');
20076
20225
  currentChild = currentChild.nextElementSibling;
20077
20226
  }
20227
+ let tempSpanToRemove = this.parent.inputElement.querySelector('.tempSpan');
20228
+ if (tempSpanToRemove && tempSpanToRemove.previousSibling && focusNode.textContent.trim().length !== 0) {
20229
+ focusNode = tempSpanToRemove.previousSibling;
20230
+ pointer = tempSpanToRemove.previousSibling.textContent.length;
20231
+ const parentElement = tempSpanToRemove.parentNode;
20232
+ parentElement.removeChild(tempSpanToRemove);
20233
+ tempSpanToRemove = null;
20234
+ }
20078
20235
  const currentChildNode = this.parent.inputElement.querySelector('.currentStartMark').childNodes;
20079
20236
  if (currentChildNode.length > 1) {
20080
20237
  for (let i = 0; i < currentChildNode.length; i++) {
@@ -20527,7 +20684,7 @@ class HtmlEditor {
20527
20684
  const item = args.item;
20528
20685
  const closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');
20529
20686
  if (item.command !== 'FormatPainter') {
20530
- if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {
20687
+ if (closestElement && !closestElement.classList.contains('e-rte-inline-popup') && !closestElement.classList.contains('e-rte-text-popup')) {
20531
20688
  if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||
20532
20689
  item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {
20533
20690
  if (isIDevice$1() && item.command === 'Images') {
@@ -20798,6 +20955,7 @@ class PasteCleanup {
20798
20955
  'header', 'article', 'nav', 'footer', 'section', 'aside', 'main', 'figure', 'figcaption'];
20799
20956
  this.isNotFromHtml = false;
20800
20957
  this.containsHtml = false;
20958
+ this.cropImageData = [];
20801
20959
  this.parent = parent;
20802
20960
  this.locator = serviceLocator;
20803
20961
  this.renderFactory = this.locator.getService('rendererFactory');
@@ -20877,8 +21035,9 @@ class PasteCleanup {
20877
21035
  args: e.args,
20878
21036
  text: e.text,
20879
21037
  allowedStylePropertiesArray: this.parent.pasteCleanupSettings.allowedStyleProps,
20880
- callBack: (a) => {
21038
+ callBack: (a, cropImageData) => {
20881
21039
  value = a.trim();
21040
+ this.cropImageData = cropImageData;
20882
21041
  }
20883
21042
  });
20884
21043
  }
@@ -20926,7 +21085,9 @@ class PasteCleanup {
20926
21085
  currentFocusNode = currentFocusNode.childNodes[this.nodeSelectionObj.getRange(this.contentRenderer.getDocument()).startOffset];
20927
21086
  }
20928
21087
  if (currentFocusNode.previousSibling.nodeName === 'IMG') {
20929
- currentFocusNode.previousSibling.classList.add('pasteContent_Img');
21088
+ if (!isNullOrUndefined(currentFocusNode.previousSibling.getAttribute('src'))) {
21089
+ currentFocusNode.previousSibling.classList.add('pasteContent_Img');
21090
+ }
20930
21091
  currentFocusNode.previousSibling.classList.add(CLS_RTE_IMAGE);
20931
21092
  if (this.parent.insertImageSettings.display === 'inline') {
20932
21093
  currentFocusNode.previousSibling.classList.add(CLS_IMGINLINE);
@@ -20958,6 +21119,7 @@ class PasteCleanup {
20958
21119
  makeSpace(enterSplitText) {
20959
21120
  let contentWithSpace = '';
20960
21121
  let spaceBetweenContent = true;
21122
+ enterSplitText = enterSplitText.replace(/\t/g, '&nbsp;&nbsp;&nbsp;&nbsp;');
20961
21123
  const spaceSplit = enterSplitText.split(' ');
20962
21124
  for (let j = 0; j < spaceSplit.length; j++) {
20963
21125
  if (spaceSplit[j].trim() === '') {
@@ -20977,7 +21139,8 @@ class PasteCleanup {
20977
21139
  const imgName = [];
20978
21140
  const uploadImg = [];
20979
21141
  for (let i = 0; i < allImgElm.length; i++) {
20980
- if (allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {
21142
+ if (!isNullOrUndefined(allImgElm[i].getAttribute('src')) &&
21143
+ allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {
20981
21144
  base64Src.push(allImgElm[i].getAttribute('src'));
20982
21145
  imgName.push(getUniqueID('rte_image'));
20983
21146
  uploadImg.push(allImgElm[i]);
@@ -21057,8 +21220,6 @@ class PasteCleanup {
21057
21220
  setTimeout(() => {
21058
21221
  this.refreshPopup(imgElem, this.popupObj);
21059
21222
  }, timeOut);
21060
- let rawFile;
21061
- let beforeUploadArgs;
21062
21223
  this.uploadObj = new Uploader({
21063
21224
  asyncSettings: {
21064
21225
  saveUrl: this.parent.insertImageSettings.saveUrl,
@@ -21090,28 +21251,8 @@ class PasteCleanup {
21090
21251
  }
21091
21252
  },
21092
21253
  beforeUpload: (args) => {
21093
- if (this.parent.isServerRendered) {
21094
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
21095
- beforeUploadArgs.filesData = rawFile;
21096
- args.cancel = true;
21097
- this.parent.trigger(imageUploading, beforeUploadArgs, (beforeUploadArgs) => {
21098
- if (beforeUploadArgs.cancel) {
21099
- return;
21100
- }
21101
- this.toolbarEnableDisable(true);
21102
- /* eslint-disable */
21103
- this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
21104
- beforeUploadArgs.currentRequest : this.uploadObj.currentRequestHeader;
21105
- this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
21106
- beforeUploadArgs.customFormData : this.uploadObj.customFormDatas;
21107
- this.uploadObj.uploadFiles(rawFile, null);
21108
- /* eslint-enable */
21109
- });
21110
- }
21111
- else {
21112
- this.parent.trigger(beforeImageUpload, args);
21113
- this.toolbarEnableDisable(true);
21114
- }
21254
+ this.parent.trigger(beforeImageUpload, args);
21255
+ this.toolbarEnableDisable(true);
21115
21256
  },
21116
21257
  // eslint-disable-next-line
21117
21258
  failure: (e) => {
@@ -21129,9 +21270,6 @@ class PasteCleanup {
21129
21270
  },
21130
21271
  selected: (e) => {
21131
21272
  e.cancel = true;
21132
- if (this.parent.isServerRendered) {
21133
- rawFile = e.filesData;
21134
- }
21135
21273
  },
21136
21274
  removing: () => {
21137
21275
  this.parent.inputElement.contentEditable = 'true';
@@ -21153,8 +21291,6 @@ class PasteCleanup {
21153
21291
  statusCode: '1'
21154
21292
  }];
21155
21293
  this.uploadObj.createFileList(fileData);
21156
- /* eslint-enable */
21157
- rawFile = fileData;
21158
21294
  this.uploadObj.upload(fileData);
21159
21295
  this.popupObj.element.getElementsByClassName('e-file-select-wrap')[0].style.display = 'none';
21160
21296
  detach(this.popupObj.element.querySelector('.e-rte-dialog-upload .e-file-select-wrap'));
@@ -21228,7 +21364,9 @@ class PasteCleanup {
21228
21364
  * @deprecated
21229
21365
  */
21230
21366
  imageFormatting(pasteArgs, imgElement) {
21231
- imgElement.elements[0].classList.add('pasteContent_Img');
21367
+ if (!isNullOrUndefined(imgElement.elements[0].getAttribute('src'))) {
21368
+ imgElement.elements[0].classList.add('pasteContent_Img');
21369
+ }
21232
21370
  const imageElement = this.parent.createElement('span');
21233
21371
  imageElement.appendChild(imgElement.elements[0]);
21234
21372
  const imageValue = imageElement.innerHTML;
@@ -21419,7 +21557,9 @@ class PasteCleanup {
21419
21557
  clipBoardElem.innerHTML = this.sanitizeHelper(clipBoardElem.innerHTML);
21420
21558
  const allImg = clipBoardElem.querySelectorAll('img');
21421
21559
  for (let i = 0; i < allImg.length; i++) {
21422
- allImg[i].classList.add('pasteContent_Img');
21560
+ if (!isNullOrUndefined(allImg[i].getAttribute('src'))) {
21561
+ allImg[i].classList.add('pasteContent_Img');
21562
+ }
21423
21563
  this.setImageProperties(allImg[i]);
21424
21564
  }
21425
21565
  this.addTempClass(clipBoardElem);
@@ -21462,6 +21602,47 @@ class PasteCleanup {
21462
21602
  }, clipBoardElem, null, null, this.parent.enterKey);
21463
21603
  this.removeTempClass();
21464
21604
  this.parent.notify(toolbarRefresh, {});
21605
+ this.cropImageHandler(this.parent.inputElement);
21606
+ }
21607
+ }
21608
+ cropImageHandler(element) {
21609
+ const allImgElm = element.querySelectorAll('.e-img-cropped');
21610
+ if (allImgElm.length > 0) {
21611
+ for (let i = 0; i < allImgElm.length; i++) {
21612
+ if (allImgElm[i].getAttribute('src').split(',')[0].indexOf('base64') >= 0) {
21613
+ const image = new Image();
21614
+ image.src = allImgElm[i].getAttribute('src');
21615
+ const canvas = document.createElement('canvas');
21616
+ const ctx = canvas.getContext('2d');
21617
+ image.onload = () => {
21618
+ const wGoalWidth = this.cropImageData[i].goalWidth / image.naturalWidth;
21619
+ const hGoalHeight = this.cropImageData[i].goalHeight / image.naturalHeight;
21620
+ const cropLength = this.cropImageData[i].cropLength / wGoalWidth;
21621
+ const cropTop = this.cropImageData[i].cropTop / hGoalHeight;
21622
+ const cropWidth = (this.cropImageData[i].goalWidth -
21623
+ this.cropImageData[i].cropLength -
21624
+ this.cropImageData[i].cropR) / wGoalWidth;
21625
+ const cropHeight = (this.cropImageData[i].goalHeight -
21626
+ this.cropImageData[i].cropTop -
21627
+ this.cropImageData[i].cropB) / hGoalHeight;
21628
+ canvas.width = cropWidth;
21629
+ canvas.height = cropHeight;
21630
+ // Draw the cropped portion of the image onto the canvas
21631
+ ctx.drawImage(image, cropLength, cropTop, cropWidth, cropHeight, 0, 0, cropWidth, cropHeight);
21632
+ // Convert the cropped canvas to a base64 encoded image
21633
+ const croppedBase64 = canvas.toDataURL('image/png');
21634
+ // Call the provided callback with the cropped base64 data
21635
+ allImgElm[i].setAttribute('src', croppedBase64);
21636
+ allImgElm[i].classList.remove('e-img-cropped');
21637
+ this.imgUploading(this.parent.inputElement);
21638
+ if (this.parent.iframeSettings.enable) {
21639
+ this.parent.updateValue();
21640
+ }
21641
+ };
21642
+ }
21643
+ }
21644
+ }
21645
+ else {
21465
21646
  this.imgUploading(this.parent.inputElement);
21466
21647
  if (this.parent.iframeSettings.enable) {
21467
21648
  this.parent.updateValue();
@@ -22403,6 +22584,10 @@ class FormatPainter {
22403
22584
  clickargs.args.action = 'escape';
22404
22585
  this.actionHandler(clickargs, 'keyBoard');
22405
22586
  }
22587
+ if (this.parent.quickToolbarModule && !isNullOrUndefined(this.parent.quickToolbarSettings.text) &&
22588
+ this.parent.element.ownerDocument.contains(this.parent.quickToolbarModule.textQTBar.element)) {
22589
+ this.parent.quickToolbarModule.textQTBar.hidePopup();
22590
+ }
22406
22591
  }
22407
22592
  toolbarDoubleClick(args) {
22408
22593
  this.isActive = true;
@@ -22481,12 +22666,14 @@ class FormatPainter {
22481
22666
  }
22482
22667
  }
22483
22668
  updateToolbarBtn(enable) {
22484
- const toolbarBtn = this.parent.element.querySelector('.e-rte-format-painter').parentElement.parentElement;
22485
- if (enable) {
22486
- addClass([toolbarBtn], 'e-active');
22487
- }
22488
- else if (!this.isSticky) {
22489
- removeClass([toolbarBtn], 'e-active');
22669
+ if (!isNullOrUndefined(this.parent.element.querySelector('.e-rte-format-painter'))) {
22670
+ const toolbarBtn = this.parent.element.querySelector('.e-rte-format-painter').parentElement.parentElement;
22671
+ if (enable) {
22672
+ addClass([toolbarBtn], 'e-active');
22673
+ }
22674
+ else if (!this.isSticky) {
22675
+ removeClass([toolbarBtn], 'e-active');
22676
+ }
22490
22677
  }
22491
22678
  }
22492
22679
  editAreaClick(args) {
@@ -22556,7 +22743,13 @@ class EmojiPicker {
22556
22743
  }
22557
22744
  // eslint-disable-next-line
22558
22745
  toolbarClick(args) {
22559
- const spanElement = this.parent.element.querySelector('.e-emoji');
22746
+ let spanElement;
22747
+ if (!isNullOrUndefined(this.parent.element.querySelector('.e-emoji'))) {
22748
+ spanElement = this.parent.element.querySelector('.e-emoji');
22749
+ }
22750
+ else if (this.parent.inlineMode.enable) {
22751
+ spanElement = this.parent.element.ownerDocument.querySelector('.e-emoji');
22752
+ }
22560
22753
  this.divElement = spanElement.closest('div');
22561
22754
  const range = this.parent.formatter.editorManager.nodeSelection.getRange(this.parent.contentModule.getDocument());
22562
22755
  this.save = this.parent.formatter.editorManager.nodeSelection.save(range, this.parent.contentModule.getDocument());
@@ -22571,7 +22764,12 @@ class EmojiPicker {
22571
22764
  this.popupObj.hide();
22572
22765
  }
22573
22766
  this.popDiv = this.parent.createElement('div', { className: 'e-rte-emojipicker-popup', id: this.parent.getID() + '_emojiPicker' });
22574
- this.parent.getToolbar().appendChild(this.popDiv);
22767
+ if (!isNullOrUndefined(this.parent.getToolbar()) && !this.parent.inlineMode.enable) {
22768
+ this.parent.getToolbar().appendChild(this.popDiv);
22769
+ }
22770
+ else if (this.parent.inlineMode.enable) {
22771
+ this.parent.inputElement.appendChild(this.popDiv);
22772
+ }
22575
22773
  EventHandler.add(this.popDiv, 'keydown', this.onKeyDown, this);
22576
22774
  EventHandler.add(this.popDiv, 'keyup', this.searchFilter, this);
22577
22775
  const extendEle = this.parent.element.querySelector('.e-toolbar-extended');
@@ -22586,13 +22784,14 @@ class EmojiPicker {
22586
22784
  let target;
22587
22785
  let xValue;
22588
22786
  let yValue;
22589
- if (!isNullOrUndefined(args.args)) {
22787
+ if (!isNullOrUndefined(args.args) && !this.parent.inlineMode.enable &&
22788
+ isNullOrUndefined(this.parent.quickToolbarSettings.text)) {
22590
22789
  target = args.args.originalEvent.target;
22591
22790
  target = target.classList.contains('e-toolbar-item') ? target.firstChild : target.parentElement;
22592
22791
  xValue = 'left';
22593
22792
  yValue = 'bottom';
22594
22793
  }
22595
- else if (isNullOrUndefined(args.x) && isNullOrUndefined(args.y)) {
22794
+ else if (isNullOrUndefined(args.x) && isNullOrUndefined(args.y) && !this.parent.inlineMode.enable && isNullOrUndefined(this.parent.quickToolbarSettings.text)) {
22596
22795
  target = this.parent.inputElement;
22597
22796
  if (window.getSelection().rangeCount > 0) {
22598
22797
  const coordinates = this.getCoordinates();
@@ -22600,6 +22799,14 @@ class EmojiPicker {
22600
22799
  yValue = coordinates.top;
22601
22800
  }
22602
22801
  }
22802
+ else if (isNullOrUndefined(args.x) && isNullOrUndefined(args.y) && (this.parent.inlineMode.enable || !isNullOrUndefined(this.parent.quickToolbarSettings.text))) {
22803
+ this.parent.notify(hidePopup, {});
22804
+ if (window.getSelection().rangeCount > 0) {
22805
+ const coordinates = this.getCoordinates();
22806
+ xValue = coordinates.left;
22807
+ yValue = coordinates.top;
22808
+ }
22809
+ }
22603
22810
  else {
22604
22811
  target = this.parent.inputElement;
22605
22812
  xValue = args.x;
@@ -22626,7 +22833,8 @@ class EmojiPicker {
22626
22833
  addClass([this.popupObj.element], 'e-popup-open');
22627
22834
  this.popupObj.refreshPosition(target);
22628
22835
  // header search element
22629
- if ((!isNullOrUndefined(args.args) || (isNullOrUndefined(args.x) && isNullOrUndefined(args.y))) && this.parent.emojiPickerSettings.showSearchBox) {
22836
+ if ((!isNullOrUndefined(args.args) || (isNullOrUndefined(args.x) && isNullOrUndefined(args.y))) &&
22837
+ this.parent.emojiPickerSettings.showSearchBox) {
22630
22838
  const inputEle = createElement('input', { id: 'e-rte-emoji-search', className: 'e-rte-emoji-search' });
22631
22839
  this.popDiv.append(inputEle);
22632
22840
  const inputobj = new TextBox({
@@ -22662,7 +22870,8 @@ class EmojiPicker {
22662
22870
  this.popDiv.appendChild(emojiBtnDiv);
22663
22871
  let height;
22664
22872
  const popupBorder = window.getComputedStyle(this.popDiv);
22665
- if ((isNullOrUndefined(args.args) && !(isNullOrUndefined(args.x) && isNullOrUndefined(args.y))) || !this.parent.emojiPickerSettings.showSearchBox) {
22873
+ if ((isNullOrUndefined(args.args) && !(isNullOrUndefined(args.x) && isNullOrUndefined(args.y))) ||
22874
+ !this.parent.emojiPickerSettings.showSearchBox) {
22666
22875
  height = (this.popDiv.getBoundingClientRect().height - emojiToolBar.getBoundingClientRect().height - (2 * parseFloat(popupBorder.borderWidth))) + 'px';
22667
22876
  emojiBtnDiv.style.setProperty('height', height, 'important');
22668
22877
  }
@@ -22708,13 +22917,6 @@ class EmojiPicker {
22708
22917
  if (!isNullOrUndefined(popup)) {
22709
22918
  scrollTop = Math.round(popup.scrollTop);
22710
22919
  }
22711
- for (let i = 0; i < toolbarName.length; i++) {
22712
- /* eslint-disable */
22713
- if (toolbarName[i].classList.contains('e-selected')) {
22714
- removeClass([toolbarName[i]], 'e-selected');
22715
- }
22716
- /* eslint-enable */
22717
- }
22718
22920
  if (scrollTop < toolbarName[0].offsetHeight) {
22719
22921
  addClass([toolbarName[0]], 'e-selected');
22720
22922
  }
@@ -23169,7 +23371,7 @@ class EmojiPicker {
23169
23371
  const startOffset = this.save.startOffset;
23170
23372
  const textContent = this.save.range.startContainer.textContent;
23171
23373
  const previousText = textContent.substring(startOffset, startOffset + 1);
23172
- // When toolbar action is clicked then only restore the range.
23374
+ // When toolbar action is clicked then only restore the range.
23173
23375
  if (!isNullOrUndefined(this.clickEvent) || previousText !== ':') {
23174
23376
  this.save.restore();
23175
23377
  }
@@ -23747,6 +23949,9 @@ class Link {
23747
23949
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
23748
23950
  this.quickToolObj.inlineQTBar.hidePopup();
23749
23951
  }
23952
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
23953
+ this.quickToolObj.textQTBar.hidePopup();
23954
+ }
23750
23955
  }
23751
23956
  }
23752
23957
  // eslint-disable-next-line
@@ -23938,7 +24143,7 @@ class Link {
23938
24143
  /**
23939
24144
  * `Image` module is used to handle image actions.
23940
24145
  */
23941
- class Image {
24146
+ class Image$1 {
23942
24147
  constructor(parent, serviceLocator) {
23943
24148
  this.isImgUploaded = false;
23944
24149
  this.isAllowedTypes = true;
@@ -25344,6 +25549,9 @@ class Image {
25344
25549
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
25345
25550
  this.quickToolObj.inlineQTBar.hidePopup();
25346
25551
  }
25552
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
25553
+ this.quickToolObj.textQTBar.hidePopup();
25554
+ }
25347
25555
  }
25348
25556
  }
25349
25557
  // eslint-disable-next-line
@@ -25609,10 +25817,8 @@ class Image {
25609
25817
  });
25610
25818
  uploadParentEle.appendChild(uploadEle);
25611
25819
  let altText;
25612
- let rawFile;
25613
25820
  let selectArgs;
25614
25821
  let filesData;
25615
- let beforeUploadArgs;
25616
25822
  this.uploadObj = new Uploader({
25617
25823
  asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, removeUrl: this.parent.insertImageSettings.removeUrl },
25618
25824
  dropArea: span, multiple: false, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass,
@@ -25620,13 +25826,8 @@ class Image {
25620
25826
  selected: (e) => {
25621
25827
  proxy.isImgUploaded = true;
25622
25828
  selectArgs = e;
25829
+ // eslint-disable-next-line
25623
25830
  filesData = e.filesData;
25624
- if (this.parent.isServerRendered) {
25625
- selectArgs = JSON.parse(JSON.stringify(e));
25626
- e.cancel = true;
25627
- rawFile = e.filesData;
25628
- selectArgs.filesData = rawFile;
25629
- }
25630
25831
  this.parent.trigger(imageSelected, selectArgs, (selectArgs) => {
25631
25832
  if (!selectArgs.cancel) {
25632
25833
  this.checkExtension(selectArgs.filesData[0]);
@@ -25657,35 +25858,11 @@ class Image {
25657
25858
  });
25658
25859
  reader.readAsDataURL(selectArgs.filesData[0].rawFile);
25659
25860
  }
25660
- if (this.parent.isServerRendered) {
25661
- /* eslint-disable */
25662
- this.uploadObj._internalRenderSelect(selectArgs, rawFile);
25663
- /* eslint-enable */
25664
- }
25665
25861
  }
25666
25862
  });
25667
25863
  },
25668
25864
  beforeUpload: (args) => {
25669
- if (this.parent.isServerRendered) {
25670
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
25671
- beforeUploadArgs.filesData = filesData;
25672
- args.cancel = true;
25673
- this.parent.trigger(imageUploading, beforeUploadArgs, (beforeUploadArgs) => {
25674
- if (beforeUploadArgs.cancel) {
25675
- return;
25676
- }
25677
- /* eslint-disable */
25678
- this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
25679
- beforeUploadArgs.currentRequest : this.uploadObj.currentRequestHeader;
25680
- this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
25681
- beforeUploadArgs.customFormData : this.uploadObj.customFormDatas;
25682
- this.uploadObj.uploadFiles(rawFile, null);
25683
- /* eslint-enable */
25684
- });
25685
- }
25686
- else {
25687
- this.parent.trigger(beforeImageUpload, args);
25688
- }
25865
+ this.parent.trigger(beforeImageUpload, args);
25689
25866
  },
25690
25867
  uploading: (e) => {
25691
25868
  if (!this.parent.isServerRendered) {
@@ -25999,8 +26176,6 @@ class Image {
25999
26176
  setTimeout(() => {
26000
26177
  proxy.refreshPopup(imageElement);
26001
26178
  }, timeOut);
26002
- let rawFile;
26003
- let beforeUploadArgs;
26004
26179
  this.uploadObj = new Uploader({
26005
26180
  asyncSettings: {
26006
26181
  saveUrl: this.parent.insertImageSettings.saveUrl,
@@ -26026,33 +26201,9 @@ class Image {
26026
26201
  }, 900);
26027
26202
  },
26028
26203
  beforeUpload: (args) => {
26029
- if (this.parent.isServerRendered) {
26030
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
26031
- beforeUploadArgs.filesData = rawFile;
26032
- isUploading = true;
26033
- args.cancel = true;
26034
- this.parent.trigger(imageUploading, beforeUploadArgs, (beforeUploadArgs) => {
26035
- if (beforeUploadArgs.cancel) {
26036
- return;
26037
- }
26038
- if (!this.parent.inlineMode.enable) {
26039
- this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);
26040
- }
26041
- /* eslint-disable */
26042
- this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
26043
- beforeUploadArgs.currentRequest : this.uploadObj.currentRequestHeader;
26044
- this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
26045
- beforeUploadArgs.customFormData : this.uploadObj.customFormDatas;
26046
- this.uploadObj.uploadFiles(rawFile, null);
26047
- this.parent.inputElement.contentEditable = 'false';
26048
- /* eslint-enable */
26049
- });
26050
- }
26051
- else {
26052
- this.parent.trigger(beforeImageUpload, args);
26053
- if (!this.parent.inlineMode.enable) {
26054
- this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);
26055
- }
26204
+ this.parent.trigger(beforeImageUpload, args);
26205
+ if (!this.parent.inlineMode.enable) {
26206
+ this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);
26056
26207
  }
26057
26208
  },
26058
26209
  uploading: (e) => {
@@ -26077,9 +26228,6 @@ class Image {
26077
26228
  if (isUploading) {
26078
26229
  e.cancel = true;
26079
26230
  }
26080
- if (this.parent.isServerRendered) {
26081
- rawFile = e.filesData;
26082
- }
26083
26231
  },
26084
26232
  failure: (e) => {
26085
26233
  isUploading = false;
@@ -26860,6 +27008,9 @@ class Audio {
26860
27008
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
26861
27009
  this.quickToolObj.inlineQTBar.hidePopup();
26862
27010
  }
27011
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
27012
+ this.quickToolObj.textQTBar.hidePopup();
27013
+ }
26863
27014
  }
26864
27015
  }
26865
27016
  // eslint-disable-next-line
@@ -26927,10 +27078,8 @@ class Audio {
26927
27078
  });
26928
27079
  uploadParentEle.appendChild(uploadEle);
26929
27080
  let fileName;
26930
- let rawFile;
26931
27081
  let selectArgs;
26932
27082
  let filesData;
26933
- let beforeUploadArgs;
26934
27083
  this.uploadObj = new Uploader({
26935
27084
  asyncSettings: { saveUrl: this.parent.insertAudioSettings.saveUrl, removeUrl: this.parent.insertAudioSettings.removeUrl },
26936
27085
  dropArea: span, multiple: false, enableRtl: this.parent.enableRtl,
@@ -26938,13 +27087,8 @@ class Audio {
26938
27087
  selected: (e) => {
26939
27088
  proxy.isAudioUploaded = true;
26940
27089
  selectArgs = e;
27090
+ // eslint-disable-next-line
26941
27091
  filesData = e.filesData;
26942
- if (this.parent.isServerRendered) {
26943
- selectArgs = JSON.parse(JSON.stringify(e));
26944
- e.cancel = true;
26945
- rawFile = e.filesData;
26946
- selectArgs.filesData = rawFile;
26947
- }
26948
27092
  this.parent.trigger(fileSelected, selectArgs, (selectArgs) => {
26949
27093
  if (!selectArgs.cancel) {
26950
27094
  this.checkExtension(selectArgs.filesData[0]);
@@ -26967,35 +27111,11 @@ class Audio {
26967
27111
  });
26968
27112
  reader.readAsDataURL(selectArgs.filesData[0].rawFile);
26969
27113
  }
26970
- if (this.parent.isServerRendered) {
26971
- /* eslint-disable */
26972
- this.uploadObj._internalRenderSelect(selectArgs, rawFile);
26973
- /* eslint-enable */
26974
- }
26975
27114
  }
26976
27115
  });
26977
27116
  },
26978
27117
  beforeUpload: (args) => {
26979
- if (this.parent.isServerRendered) {
26980
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
26981
- beforeUploadArgs.filesData = filesData;
26982
- args.cancel = true;
26983
- this.parent.trigger(fileUploading, beforeUploadArgs, (beforeUploadArgs) => {
26984
- if (beforeUploadArgs.cancel) {
26985
- return;
26986
- }
26987
- /* eslint-disable */
26988
- this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
26989
- beforeUploadArgs.currentRequest : this.uploadObj.currentRequestHeader;
26990
- this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
26991
- beforeUploadArgs.customFormData : this.uploadObj.customFormDatas;
26992
- this.uploadObj.uploadFiles(rawFile, null);
26993
- /* eslint-enable */
26994
- });
26995
- }
26996
- else {
26997
- this.parent.trigger(beforeFileUpload, args);
26998
- }
27118
+ this.parent.trigger(beforeFileUpload, args);
26999
27119
  },
27000
27120
  uploading: (e) => {
27001
27121
  if (!this.parent.isServerRendered) {
@@ -28223,6 +28343,9 @@ class Video {
28223
28343
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
28224
28344
  this.quickToolObj.inlineQTBar.hidePopup();
28225
28345
  }
28346
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
28347
+ this.quickToolObj.textQTBar.hidePopup();
28348
+ }
28226
28349
  }
28227
28350
  }
28228
28351
  // eslint-disable-next-line
@@ -28332,10 +28455,8 @@ class Video {
28332
28455
  });
28333
28456
  uploadParentEle.appendChild(uploadEle);
28334
28457
  let fileName;
28335
- let rawFile;
28336
28458
  let selectArgs;
28337
28459
  let filesData;
28338
- let beforeUploadArgs;
28339
28460
  this.uploadObj = new Uploader({
28340
28461
  asyncSettings: { saveUrl: this.parent.insertVideoSettings.saveUrl, removeUrl: this.parent.insertVideoSettings.removeUrl },
28341
28462
  dropArea: span, multiple: false, enableRtl: this.parent.enableRtl,
@@ -28343,13 +28464,8 @@ class Video {
28343
28464
  selected: (e) => {
28344
28465
  proxy.isVideoUploaded = true;
28345
28466
  selectArgs = e;
28467
+ // eslint-disable-next-line
28346
28468
  filesData = e.filesData;
28347
- if (this.parent.isServerRendered) {
28348
- selectArgs = JSON.parse(JSON.stringify(e));
28349
- e.cancel = true;
28350
- rawFile = e.filesData;
28351
- selectArgs.filesData = rawFile;
28352
- }
28353
28469
  this.parent.trigger(fileSelected, selectArgs, (selectArgs) => {
28354
28470
  if (!selectArgs.cancel) {
28355
28471
  this.checkExtension(selectArgs.filesData[0]);
@@ -28373,35 +28489,11 @@ class Video {
28373
28489
  });
28374
28490
  reader.readAsDataURL(selectArgs.filesData[0].rawFile);
28375
28491
  }
28376
- if (this.parent.isServerRendered) {
28377
- /* eslint-disable */
28378
- this.uploadObj._internalRenderSelect(selectArgs, rawFile);
28379
- /* eslint-enable */
28380
- }
28381
28492
  }
28382
28493
  });
28383
28494
  },
28384
28495
  beforeUpload: (args) => {
28385
- if (this.parent.isServerRendered) {
28386
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
28387
- beforeUploadArgs.filesData = filesData;
28388
- args.cancel = true;
28389
- this.parent.trigger(fileUploading, beforeUploadArgs, (beforeUploadArgs) => {
28390
- if (beforeUploadArgs.cancel) {
28391
- return;
28392
- }
28393
- /* eslint-disable */
28394
- this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
28395
- beforeUploadArgs.currentRequest : this.uploadObj.currentRequestHeader;
28396
- this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
28397
- beforeUploadArgs.customFormData : this.uploadObj.customFormDatas;
28398
- this.uploadObj.uploadFiles(rawFile, null);
28399
- /* eslint-enable */
28400
- });
28401
- }
28402
- else {
28403
- this.parent.trigger(beforeFileUpload, args);
28404
- }
28496
+ this.parent.trigger(beforeFileUpload, args);
28405
28497
  },
28406
28498
  uploading: (e) => {
28407
28499
  if (!this.parent.isServerRendered) {
@@ -28647,6 +28739,7 @@ class ViewSource {
28647
28739
  * @deprecated
28648
28740
  */
28649
28741
  sourceCode(args) {
28742
+ this.parent.notify(hidePopup, {});
28650
28743
  this.parent.isBlur = false;
28651
28744
  this.parent.trigger(actionBegin, { requestType: 'SourceCode', targetItem: 'SourceCode', args: args });
28652
28745
  const tbItems = selectAll('.' + CLS_TB_ITEM, this.parent.element);
@@ -29278,14 +29371,17 @@ class Table {
29278
29371
  let pageX;
29279
29372
  let pageY;
29280
29373
  if (Browser.isDevice && e.args.touches) {
29281
- pageX = e.args.changedTouches[0].pageX;
29282
- pageY = e.args.changedTouches[0].pageY;
29374
+ pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset + this.parent.element.getBoundingClientRect().left +
29375
+ e.args.changedTouches[0].clientX : e.args.changedTouches[0].pageX;
29376
+ pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + this.parent.element.getBoundingClientRect().top +
29377
+ (!this.parent.inlineMode.enable ? this.parent.toolbarModule.getToolbarHeight() : 0)
29378
+ + e.args.changedTouches[0].clientY : e.args.changedTouches[0].pageY;
29283
29379
  }
29284
29380
  else {
29285
29381
  pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset
29286
29382
  + this.parent.element.getBoundingClientRect().left + args.clientX : args.pageX;
29287
- pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +
29288
- this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;
29383
+ pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + this.parent.element.getBoundingClientRect().top +
29384
+ this.parent.toolbarModule.getToolbarHeight() + args.clientY : args.pageY;
29289
29385
  }
29290
29386
  this.quickToolObj.tableQTBar.showPopup(pageX, pageY, target);
29291
29387
  this.parent.formatter.editorManager.nodeSelection.restore();
@@ -29684,7 +29780,7 @@ class Table {
29684
29780
  const width = parseFloat(this.columnEle.offsetWidth.toString());
29685
29781
  const cellRow = this.curTable.rows[0].cells[0].nodeName === 'TH' ? 1 : 0;
29686
29782
  let currentTableWidth;
29687
- if (this.curTable.style.width != '') {
29783
+ if (this.curTable.style.width !== '') {
29688
29784
  currentTableWidth = parseFloat(this.curTable.style.width.split('%')[0]);
29689
29785
  }
29690
29786
  else {
@@ -29747,6 +29843,7 @@ class Table {
29747
29843
  let isMergedEleResize = false;
29748
29844
  let leftTableCell;
29749
29845
  let rightTableCell;
29846
+ /* eslint-disable */
29750
29847
  for (let j = 0; j < currentRow.cells.length; j++) {
29751
29848
  if (currentRow.cells[j].hasAttribute('rowspan') && j <= this.colIndex) {
29752
29849
  isRowCellsMerged = true;
@@ -29805,6 +29902,7 @@ class Table {
29805
29902
  this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';
29806
29903
  }
29807
29904
  }
29905
+ /* eslint-enable */
29808
29906
  }
29809
29907
  }
29810
29908
  }
@@ -29939,7 +30037,8 @@ class Table {
29939
30037
  this.hideTableQuickToolbar();
29940
30038
  }
29941
30039
  renderDlgContent(args) {
29942
- if (Browser.isDevice || this.parent.inlineMode.enable) {
30040
+ const argsTarget = args.args.originalEvent.target;
30041
+ if (Browser.isDevice || this.parent.inlineMode.enable || !isNullOrUndefined(closest(argsTarget, '.e-rte-text-popup'))) {
29943
30042
  this.insertTableDialog(args);
29944
30043
  return;
29945
30044
  }
@@ -30193,6 +30292,10 @@ class Table {
30193
30292
  if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
30194
30293
  this.quickToolObj.inlineQTBar.hidePopup();
30195
30294
  }
30295
+ if (this.quickToolObj && this.quickToolObj.textQTBar &&
30296
+ this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
30297
+ this.quickToolObj.textQTBar.hidePopup();
30298
+ }
30196
30299
  }
30197
30300
  customTable(args, e) {
30198
30301
  const proxy = (this.self) ? this.self : this;
@@ -30200,7 +30303,8 @@ class Table {
30200
30303
  const argument = ((Browser.isDevice || (!isNullOrUndefined(args.args)
30201
30304
  && !isNullOrUndefined(args.args.originalEvent) &&
30202
30305
  args.args.originalEvent.action === 'insert-table')
30203
- || proxy.parent.inlineMode.enable) ? args : this);
30306
+ || proxy.parent.inlineMode.enable || !isNullOrUndefined(proxy.parent.quickToolbarSettings.text)) ? args :
30307
+ this);
30204
30308
  proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);
30205
30309
  }
30206
30310
  }
@@ -30365,7 +30469,7 @@ class DialogRenderer {
30365
30469
  this.parent.trigger(beforeDialogOpen, args, this.beforeOpenCallback.bind(this, args));
30366
30470
  }
30367
30471
  handleEnterKeyDown(args) {
30368
- if (args.code === "Enter") {
30472
+ if (args.code === 'Enter') {
30369
30473
  args.preventDefault();
30370
30474
  }
30371
30475
  }
@@ -30845,7 +30949,7 @@ __decorate$2([
30845
30949
  Property(['VideoReplace', 'VideoAlign', 'VideoRemove', 'VideoLayoutOption', 'VideoDimension'])
30846
30950
  ], QuickToolbarSettings.prototype, "video", void 0);
30847
30951
  __decorate$2([
30848
- Property(['Cut', 'Copy', 'Paste'])
30952
+ Property(null)
30849
30953
  ], QuickToolbarSettings.prototype, "text", void 0);
30850
30954
  __decorate$2([
30851
30955
  Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])
@@ -31216,8 +31320,12 @@ class EnterKeyAction {
31216
31320
  (this.range.startContainer.previousSibling.nodeName === 'IMG' || this.range.startContainer.previousSibling.nodeName === 'BR'))) {
31217
31321
  let isNearBlockLengthZero;
31218
31322
  let newElem;
31219
- if (!isNullOrUndefined(this.range.startContainer.childNodes) && this.range.startContainer.textContent.length === 0
31220
- && (this.range.startContainer.querySelectorAll('img, audio, video').length > 0 ||
31323
+ if (!isNullOrUndefined(this.range.startContainer.childNodes) &&
31324
+ (this.range.startContainer.textContent.length === 0 ||
31325
+ (this.range.startContainer.nodeName !== '#text' && !isNullOrUndefined(this.range.startContainer.querySelector('.e-video-clickelem')) &&
31326
+ this.range.startContainer.querySelector('.e-video-clickelem').textContent.length === 0)) &&
31327
+ (this.range.startContainer.querySelectorAll('img, audio, video').length > 0 ||
31328
+ !isNullOrUndefined(this.range.startContainer.querySelector('.e-video-clickelem')) ||
31221
31329
  this.range.startContainer.nodeName === 'IMG' || this.range.startContainer.nodeName === 'TABLE')) {
31222
31330
  newElem = this.createInsertElement(shiftKey);
31223
31331
  isMediaNode = true;
@@ -32574,9 +32682,6 @@ let RichTextEditor = class RichTextEditor extends Component {
32574
32682
  this.removeAttributes();
32575
32683
  super.destroy();
32576
32684
  this.isRendered = false;
32577
- if (this.enablePersistence) {
32578
- window.localStorage.removeItem(this.getModuleName() + this.element.id);
32579
- }
32580
32685
  }
32581
32686
  removeHtmlAttributes() {
32582
32687
  if (this.htmlAttributes) {
@@ -32705,9 +32810,10 @@ let RichTextEditor = class RichTextEditor extends Component {
32705
32810
  else {
32706
32811
  nVal = newProp[prop];
32707
32812
  }
32813
+ nVal = this.serializeValue(nVal);
32708
32814
  const val = this.editorMode === 'HTML' ? getEditValue(nVal, this) : nVal;
32709
32815
  if ((!isNullOrUndefined(nVal) && nVal !== '') || prop === 'enterKey') {
32710
- this.value = this.serializeValue(((this.enableHtmlEncode) ? this.encode(decode(val)) : val));
32816
+ this.setProperties({ value: ((this.enableHtmlEncode) ? this.encode(decode(val)) : val) }, true);
32711
32817
  }
32712
32818
  this.updatePanelValue();
32713
32819
  if (this.inputElement) {
@@ -33253,10 +33359,6 @@ let RichTextEditor = class RichTextEditor extends Component {
33253
33359
  // eslint-disable-next-line
33254
33360
  const imgPadding = 12;
33255
33361
  const imgResizeBorder = 2;
33256
- if (isNullOrUndefined(this.contentModule) || isNullOrUndefined(this.contentModule.getEditPanel())) {
33257
- EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.imageModule.resizing);
33258
- return maxWidth;
33259
- }
33260
33362
  const editEle = this.contentModule.getEditPanel();
33261
33363
  const eleStyle = window.getComputedStyle(editEle);
33262
33364
  const editEleMaxWidth = editEle.offsetWidth - (imgPadding + imgResizeBorder +
@@ -34253,5 +34355,5 @@ RichTextEditor = __decorate$1([
34253
34355
  * Rich Text Editor component exported items
34254
34356
  */
34255
34357
 
34256
- export { Toolbar$2 as Toolbar, KeyboardEvents$1 as KeyboardEvents, BaseToolbar, BaseQuickToolbar, QuickToolbar, Count, ColorPickerInput, MarkdownToolbarStatus, ExecCommandCallBack, ToolbarAction, MarkdownEditor, HtmlEditor, PasteCleanup, Resize, DropDownButtons, FileManager$1 as FileManager, FullScreen, setAttributes, HtmlToolbarStatus, XhtmlValidation, FormatPainter, EmojiPicker, HTMLFormatter, Formatter, MarkdownFormatter, ContentRender, Render, ToolbarRenderer, Link, Image, Audio, Video, ViewSource, Table, DialogRenderer, IframeContentRender, MarkdownRender, PopupRenderer, RichTextEditor, RenderType, ToolbarType, DialogType, executeGroup, created, destroyed, tableclass, load, initialLoad, contentChanged, initialEnd, iframeMouseDown, destroy, toolbarClick, toolbarRefresh, refreshBegin, toolbarUpdated, bindOnEnd, renderColorPicker, htmlToolbarClick, markdownToolbarClick, destroyColorPicker, modelChanged, tableModulekeyUp, keyUp, keyDown, mouseUp, toolbarCreated, toolbarRenderComplete, enableFullScreen, disableFullScreen, dropDownSelect, beforeDropDownItemRender, execCommandCallBack, imageToolbarAction, audioToolbarAction, videoToolbarAction, linkToolbarAction, windowResize, resizeStart, onResize, resizeStop, undo, redo, insertLink, unLink, editLink, openLink, actionBegin, actionComplete, updatedToolbarStatus, actionSuccess, updateToolbarItem, insertImage, insertAudio, insertVideo, insertCompleted, imageLeft, imageRight, imageCenter, imageBreak, imageInline, imageLink, imageAlt, imageDelete, audioDelete, videoDelete, imageCaption, imageSize, videoSize, sourceCode, updateSource, toolbarOpen, beforeDropDownOpen, selectionSave, selectionRestore, expandPopupClick, count, contentFocus, contentBlur, mouseDown, sourceCodeMouseDown, editAreaClick, scroll, contentscroll, colorPickerChanged, tableColorPickerChanged, focusChange, selectAll$1 as selectAll, selectRange, getSelectedHtml, renderInlineToolbar, paste, imgModule, rtlMode, createTable, docClick, tableToolbarAction, checkUndo, readOnlyMode, moduleDestroy, pasteClean, enterHandler, beforeDialogOpen, clearDialogObj, dialogOpen, beforeDialogClose, dialogClose, beforeQuickToolbarOpen, quickToolbarOpen, quickToolbarClose, popupHide, imageSelected, imageUploading, imageUploadSuccess, imageUploadFailed, imageRemoving, fileSelected, fileUploading, fileUploadSuccess, fileUploadFailed, fileRemoving, afterImageDelete, afterMediaDelete, drop, xhtmlValidation, beforeImageUpload, beforeFileUpload, resizeInitialized, renderFileManager, beforeImageDrop, dynamicModule, beforePasteCleanup, afterPasteCleanup, updateTbItemsStatus, showLinkDialog, closeLinkDialog, showImageDialog, showAudioDialog, showVideoDialog, closeImageDialog, closeAudioDialog, closeVideoDialog, showTableDialog, closeTableDialog, bindCssClass, formatPainterClick, formatPainterDoubleClick, emojiPicker, maximizeMinimizeClick, blockEmptyNodes, inlineEmptyNodes, CLS_RTE, CLS_RTL, CLS_CONTENT, CLS_DISABLED, CLS_SCRIPT_SHEET, CLS_STYLE_SHEET, CLS_TOOLBAR, CLS_TB_FIXED, CLS_TB_FLOAT, CLS_TB_ABS_FLOAT, CLS_INLINE, CLS_TB_INLINE, CLS_RTE_EXPAND_TB, CLS_FULL_SCREEN, CLS_QUICK_TB, CLS_POP, CLS_TB_STATIC, CLS_QUICK_POP, CLS_QUICK_DROPDOWN, CLS_IMAGE_POP, CLS_INLINE_POP, CLS_INLINE_DROPDOWN, CLS_DROPDOWN_POPUP, CLS_DROPDOWN_ICONS, CLS_DROPDOWN_ITEMS, CLS_DROPDOWN_BTN, CLS_RTE_CONTENT, CLS_TB_ITEM, CLS_TB_EXTENDED, CLS_TB_WRAP, CLS_POPUP, CLS_SEPARATOR, CLS_MINIMIZE, CLS_MAXIMIZE, CLS_BACK, CLS_SHOW, CLS_HIDE, CLS_VISIBLE, CLS_FOCUS, CLS_RM_WHITE_SPACE, CLS_IMGRIGHT, CLS_IMGLEFT, CLS_IMGCENTER, CLS_IMGBREAK, CLS_AUDIOBREAK, CLS_CLICKELEM, CLS_VID_CLICK_ELEM, CLS_AUDIOWRAP, CLS_VIDEOWRAP, CLS_VIDEOBREAK, CLS_CAPTION, CLS_RTE_CAPTION, CLS_CAPINLINE, CLS_IMGINLINE, CLS_AUDIOINLINE, CLS_VIDEOINLINE, CLS_COUNT, CLS_WARNING, CLS_ERROR, CLS_ICONS, CLS_ACTIVE, CLS_EXPAND_OPEN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_HR_SEPARATOR, CLS_TB_IOS_FIX, CLS_LIST_PRIMARY_CONTENT, CLS_NUMBERFORMATLIST_TB_BTN, CLS_BULLETFORMATLIST_TB_BTN, CLS_FORMATS_TB_BTN, CLS_FONT_NAME_TB_BTN, CLS_FONT_SIZE_TB_BTN, CLS_ALIGN_TB_BTN, CLS_FONT_COLOR_TARGET, CLS_BACKGROUND_COLOR_TARGET, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_RTE_READONLY, CLS_TABLE_SEL, CLS_TB_DASH_BOR, CLS_TB_ALT_BOR, CLS_TB_COL_RES, CLS_TB_ROW_RES, CLS_TB_BOX_RES, CLS_RTE_HIDDEN, CLS_RTE_PASTE_KEEP_FORMAT, CLS_RTE_PASTE_REMOVE_FORMAT, CLS_RTE_PASTE_PLAIN_FORMAT, CLS_RTE_PASTE_OK, CLS_RTE_PASTE_CANCEL, CLS_RTE_DIALOG_MIN_HEIGHT, CLS_RTE_RES_HANDLE, CLS_RTE_RES_EAST, CLS_RTE_IMAGE, CLS_RESIZE, CLS_IMG_FOCUS, CLS_AUD_FOCUS, CLS_VID_FOCUS, CLS_RTE_DRAG_IMAGE, CLS_RTE_UPLOAD_POPUP, CLS_POPUP_OPEN, CLS_IMG_RESIZE, CLS_DROPAREA, CLS_IMG_INNER, CLS_UPLOAD_FILES, CLS_RTE_DIALOG_UPLOAD, CLS_RTE_RES_CNT, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM, CLS_TABLE, CLS_TABLE_BORDER, CLS_RTE_TABLE_RESIZE, CLS_RTE_FIXED_TB_EXPAND, CLS_RTE_TB_ENABLED, CLS_RTE_RES_WEST, getIndex, hasClass, getDropDownValue, isIDevice, getFormattedFontSize, pageYOffset, getTooltipText, setToolbarStatus, getCollection, getTBarItemsIndex, updateUndoRedoStatus, dispatchEvent, parseHtml, getTextNodesUnder, toObjectLowerCase, getEditValue, updateTextNode, getDefaultValue, isEditableValueEmpty, decode, sanitizeHelper, convertToBlob, getLocaleFontFormat, updateDropDownFontFormatLocale, ServiceLocator, RendererFactory, EditorManager, IMAGE, AUDIO, VIDEO, TABLE, LINK, INSERT_ROW, INSERT_COLUMN, DELETEROW, DELETECOLUMN, REMOVETABLE, TABLEHEADER, TABLE_VERTICAL_ALIGN, TABLE_MERGE, TABLE_VERTICAL_SPLIT, TABLE_HORIZONTAL_SPLIT, TABLE_MOVE, ALIGNMENT_TYPE, INDENT_TYPE, DEFAULT_TAG, BLOCK_TAGS, IGNORE_BLOCK_TAGS, TABLE_BLOCK_TAGS, SELECTION_TYPE, INSERTHTML_TYPE, INSERT_TEXT_TYPE, CLEAR_TYPE, SELF_CLOSING_TAGS, CLASS_IMAGE_RIGHT, CLASS_IMAGE_LEFT, CLASS_IMAGE_CENTER, CLASS_VIDEO_RIGHT, CLASS_VIDEO_LEFT, CLASS_VIDEO_CENTER, CLASS_IMAGE_BREAK, CLASS_AUDIO_BREAK, CLASS_VIDEO_BREAK, CLASS_CAPTION, CLASS_RTE_CAPTION, CLASS_CAPTION_INLINE, CLASS_IMAGE_INLINE, CLASS_AUDIO_INLINE, CLASS_CLICK_ELEM, CLASS_VIDEO_CLICK_ELEM, CLASS_AUDIO, CLASS_VIDEO, CLASS_AUDIO_WRAP, CLASS_VIDEO_WRAP, CLASS_EMBED_VIDEO_WRAP, CLASS_AUDIO_FOCUS, CLASS_VIDEO_FOCUS, CLASS_VIDEO_INLINE, Lists, markerClassName, DOMNode, Alignments, Indents, Formats, LinkCommand, InsertMethods, InsertTextExec, InsertHtmlExec, InsertHtml, IsFormatted, MsWordPaste, NodeCutter, ImageCommand, AudioCommand, VideoCommand, SelectionCommands, SelectionBasedExec, ClearFormatExec, UndoRedoManager, TableCommand, statusCollection, ToolbarStatus, FormatPainterActions, EmojiPickerAction, NodeSelection, MarkdownParser, LISTS_COMMAND, selectionCommand, LINK_COMMAND, CLEAR_COMMAND, MD_TABLE, INSERT_TEXT_COMMAND, ClearFormat, MDLists, MDFormats, MarkdownSelection, UndoRedoCommands, MDSelectionFormats, MDLink, MDTable, markdownFormatTags, markdownSelectionTags, markdownListsTags, htmlKeyConfig, markdownKeyConfig, pasteCleanupGroupingTags, listConversionFilters, selfClosingTags, KEY_DOWN, ACTION, FORMAT_TYPE, KEY_DOWN_HANDLER, LIST_TYPE, KEY_UP_HANDLER, KEY_UP, MODEL_CHANGED_PLUGIN, MODEL_CHANGED, MS_WORD_CLEANUP_PLUGIN, MS_WORD_CLEANUP, ON_BEGIN, SPACE_ACTION, FORMAT_PAINTER_ACTIONS, EMOJI_PICKER_ACTIONS };
34358
+ export { Toolbar$2 as Toolbar, KeyboardEvents$1 as KeyboardEvents, BaseToolbar, BaseQuickToolbar, QuickToolbar, Count, ColorPickerInput, MarkdownToolbarStatus, ExecCommandCallBack, ToolbarAction, MarkdownEditor, HtmlEditor, PasteCleanup, Resize, DropDownButtons, FileManager$1 as FileManager, FullScreen, setAttributes, HtmlToolbarStatus, XhtmlValidation, FormatPainter, EmojiPicker, HTMLFormatter, Formatter, MarkdownFormatter, ContentRender, Render, ToolbarRenderer, Link, Image$1 as Image, Audio, Video, ViewSource, Table, DialogRenderer, IframeContentRender, MarkdownRender, PopupRenderer, RichTextEditor, RenderType, ToolbarType, DialogType, executeGroup, created, destroyed, tableclass, load, initialLoad, contentChanged, initialEnd, iframeMouseDown, destroy, toolbarClick, toolbarRefresh, refreshBegin, toolbarUpdated, bindOnEnd, renderColorPicker, htmlToolbarClick, markdownToolbarClick, destroyColorPicker, modelChanged, tableModulekeyUp, keyUp, keyDown, mouseUp, toolbarCreated, toolbarRenderComplete, enableFullScreen, disableFullScreen, dropDownSelect, beforeDropDownItemRender, execCommandCallBack, imageToolbarAction, audioToolbarAction, videoToolbarAction, linkToolbarAction, windowResize, resizeStart, onResize, resizeStop, undo, redo, insertLink, unLink, editLink, openLink, actionBegin, actionComplete, updatedToolbarStatus, actionSuccess, updateToolbarItem, insertImage, insertAudio, insertVideo, insertCompleted, imageLeft, imageRight, imageCenter, imageBreak, imageInline, imageLink, imageAlt, imageDelete, audioDelete, videoDelete, imageCaption, imageSize, videoSize, sourceCode, updateSource, toolbarOpen, beforeDropDownOpen, selectionSave, selectionRestore, expandPopupClick, count, contentFocus, contentBlur, mouseDown, sourceCodeMouseDown, editAreaClick, scroll, contentscroll, colorPickerChanged, tableColorPickerChanged, focusChange, selectAll$1 as selectAll, selectRange, getSelectedHtml, renderInlineToolbar, paste, imgModule, rtlMode, createTable, docClick, tableToolbarAction, checkUndo, readOnlyMode, moduleDestroy, pasteClean, enterHandler, beforeDialogOpen, clearDialogObj, dialogOpen, beforeDialogClose, dialogClose, beforeQuickToolbarOpen, quickToolbarOpen, quickToolbarClose, popupHide, imageSelected, imageUploading, imageUploadSuccess, imageUploadFailed, imageRemoving, fileSelected, fileUploading, fileUploadSuccess, fileUploadFailed, fileRemoving, afterImageDelete, afterMediaDelete, drop, xhtmlValidation, beforeImageUpload, beforeFileUpload, resizeInitialized, renderFileManager, beforeImageDrop, dynamicModule, beforePasteCleanup, afterPasteCleanup, updateTbItemsStatus, showLinkDialog, closeLinkDialog, showImageDialog, showAudioDialog, showVideoDialog, closeImageDialog, closeAudioDialog, closeVideoDialog, showTableDialog, closeTableDialog, bindCssClass, formatPainterClick, formatPainterDoubleClick, emojiPicker, maximizeMinimizeClick, hidePopup, blockEmptyNodes, inlineEmptyNodes, CLS_RTE, CLS_RTL, CLS_CONTENT, CLS_DISABLED, CLS_SCRIPT_SHEET, CLS_STYLE_SHEET, CLS_TOOLBAR, CLS_TB_FIXED, CLS_TB_FLOAT, CLS_TB_ABS_FLOAT, CLS_INLINE, CLS_TB_INLINE, CLS_RTE_EXPAND_TB, CLS_FULL_SCREEN, CLS_QUICK_TB, CLS_POP, CLS_TB_STATIC, CLS_QUICK_POP, CLS_QUICK_DROPDOWN, CLS_IMAGE_POP, CLS_TEXT_POP, CLS_INLINE_POP, CLS_INLINE_DROPDOWN, CLS_DROPDOWN_POPUP, CLS_DROPDOWN_ICONS, CLS_DROPDOWN_ITEMS, CLS_DROPDOWN_BTN, CLS_RTE_CONTENT, CLS_TB_ITEM, CLS_TB_EXTENDED, CLS_TB_WRAP, CLS_POPUP, CLS_SEPARATOR, CLS_MINIMIZE, CLS_MAXIMIZE, CLS_BACK, CLS_SHOW, CLS_HIDE, CLS_VISIBLE, CLS_FOCUS, CLS_RM_WHITE_SPACE, CLS_IMGRIGHT, CLS_IMGLEFT, CLS_IMGCENTER, CLS_IMGBREAK, CLS_AUDIOBREAK, CLS_CLICKELEM, CLS_VID_CLICK_ELEM, CLS_AUDIOWRAP, CLS_VIDEOWRAP, CLS_VIDEOBREAK, CLS_CAPTION, CLS_RTE_CAPTION, CLS_CAPINLINE, CLS_IMGINLINE, CLS_AUDIOINLINE, CLS_VIDEOINLINE, CLS_COUNT, CLS_WARNING, CLS_ERROR, CLS_ICONS, CLS_ACTIVE, CLS_EXPAND_OPEN, CLS_RTE_ELEMENTS, CLS_TB_BTN, CLS_HR_SEPARATOR, CLS_TB_IOS_FIX, CLS_LIST_PRIMARY_CONTENT, CLS_NUMBERFORMATLIST_TB_BTN, CLS_BULLETFORMATLIST_TB_BTN, CLS_FORMATS_TB_BTN, CLS_FONT_NAME_TB_BTN, CLS_FONT_SIZE_TB_BTN, CLS_ALIGN_TB_BTN, CLS_FONT_COLOR_TARGET, CLS_BACKGROUND_COLOR_TARGET, CLS_COLOR_CONTENT, CLS_FONT_COLOR_DROPDOWN, CLS_BACKGROUND_COLOR_DROPDOWN, CLS_COLOR_PALETTE, CLS_FONT_COLOR_PICKER, CLS_BACKGROUND_COLOR_PICKER, CLS_RTE_READONLY, CLS_TABLE_SEL, CLS_TB_DASH_BOR, CLS_TB_ALT_BOR, CLS_TB_COL_RES, CLS_TB_ROW_RES, CLS_TB_BOX_RES, CLS_RTE_HIDDEN, CLS_RTE_PASTE_KEEP_FORMAT, CLS_RTE_PASTE_REMOVE_FORMAT, CLS_RTE_PASTE_PLAIN_FORMAT, CLS_RTE_PASTE_OK, CLS_RTE_PASTE_CANCEL, CLS_RTE_DIALOG_MIN_HEIGHT, CLS_RTE_RES_HANDLE, CLS_RTE_RES_EAST, CLS_RTE_IMAGE, CLS_RESIZE, CLS_IMG_FOCUS, CLS_AUD_FOCUS, CLS_VID_FOCUS, CLS_RTE_DRAG_IMAGE, CLS_RTE_UPLOAD_POPUP, CLS_POPUP_OPEN, CLS_IMG_RESIZE, CLS_DROPAREA, CLS_IMG_INNER, CLS_UPLOAD_FILES, CLS_RTE_DIALOG_UPLOAD, CLS_RTE_RES_CNT, CLS_CUSTOM_TILE, CLS_NOCOLOR_ITEM, CLS_TABLE, CLS_TABLE_BORDER, CLS_RTE_TABLE_RESIZE, CLS_RTE_FIXED_TB_EXPAND, CLS_RTE_TB_ENABLED, CLS_RTE_RES_WEST, getIndex, hasClass, getDropDownValue, isIDevice, getFormattedFontSize, pageYOffset, getTooltipText, setToolbarStatus, getCollection, getTBarItemsIndex, updateUndoRedoStatus, dispatchEvent, parseHtml, getTextNodesUnder, toObjectLowerCase, getEditValue, updateTextNode, getDefaultValue, isEditableValueEmpty, decode, sanitizeHelper, convertToBlob, getLocaleFontFormat, updateDropDownFontFormatLocale, ServiceLocator, RendererFactory, EditorManager, IMAGE, AUDIO, VIDEO, TABLE, LINK, INSERT_ROW, INSERT_COLUMN, DELETEROW, DELETECOLUMN, REMOVETABLE, TABLEHEADER, TABLE_VERTICAL_ALIGN, TABLE_MERGE, TABLE_VERTICAL_SPLIT, TABLE_HORIZONTAL_SPLIT, TABLE_MOVE, ALIGNMENT_TYPE, INDENT_TYPE, DEFAULT_TAG, BLOCK_TAGS, IGNORE_BLOCK_TAGS, TABLE_BLOCK_TAGS, SELECTION_TYPE, INSERTHTML_TYPE, INSERT_TEXT_TYPE, CLEAR_TYPE, SELF_CLOSING_TAGS, CLASS_IMAGE_RIGHT, CLASS_IMAGE_LEFT, CLASS_IMAGE_CENTER, CLASS_VIDEO_RIGHT, CLASS_VIDEO_LEFT, CLASS_VIDEO_CENTER, CLASS_IMAGE_BREAK, CLASS_AUDIO_BREAK, CLASS_VIDEO_BREAK, CLASS_CAPTION, CLASS_RTE_CAPTION, CLASS_CAPTION_INLINE, CLASS_IMAGE_INLINE, CLASS_AUDIO_INLINE, CLASS_CLICK_ELEM, CLASS_VIDEO_CLICK_ELEM, CLASS_AUDIO, CLASS_VIDEO, CLASS_AUDIO_WRAP, CLASS_VIDEO_WRAP, CLASS_EMBED_VIDEO_WRAP, CLASS_AUDIO_FOCUS, CLASS_VIDEO_FOCUS, CLASS_VIDEO_INLINE, Lists, markerClassName, DOMNode, Alignments, Indents, Formats, LinkCommand, InsertMethods, InsertTextExec, InsertHtmlExec, InsertHtml, IsFormatted, MsWordPaste, NodeCutter, ImageCommand, AudioCommand, VideoCommand, SelectionCommands, SelectionBasedExec, ClearFormatExec, UndoRedoManager, TableCommand, statusCollection, ToolbarStatus, FormatPainterActions, EmojiPickerAction, NodeSelection, MarkdownParser, LISTS_COMMAND, selectionCommand, LINK_COMMAND, CLEAR_COMMAND, MD_TABLE, INSERT_TEXT_COMMAND, ClearFormat, MDLists, MDFormats, MarkdownSelection, UndoRedoCommands, MDSelectionFormats, MDLink, MDTable, markdownFormatTags, markdownSelectionTags, markdownListsTags, htmlKeyConfig, markdownKeyConfig, pasteCleanupGroupingTags, listConversionFilters, selfClosingTags, KEY_DOWN, ACTION, FORMAT_TYPE, KEY_DOWN_HANDLER, LIST_TYPE, KEY_UP_HANDLER, KEY_UP, MODEL_CHANGED_PLUGIN, MODEL_CHANGED, MS_WORD_CLEANUP_PLUGIN, MS_WORD_CLEANUP, ON_BEGIN, SPACE_ACTION, FORMAT_PAINTER_ACTIONS, EMOJI_PICKER_ACTIONS };
34257
34359
  //# sourceMappingURL=ej2-richtexteditor.es2015.js.map