@syncfusion/ej2-richtexteditor 20.1.61 → 20.2.39

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 (93) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/ej2-richtexteditor.umd.min.js +2 -2
  3. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  4. package/dist/es6/ej2-richtexteditor.es2015.js +468 -191
  5. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  6. package/dist/es6/ej2-richtexteditor.es5.js +460 -181
  7. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  8. package/dist/global/ej2-richtexteditor.min.js +2 -2
  9. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  10. package/dist/global/index.d.ts +1 -1
  11. package/helpers/e2e/index.js +8 -6
  12. package/helpers/e2e/rte-helper.js +80 -64
  13. package/package.json +12 -12
  14. package/src/common/util.js +7 -8
  15. package/src/editor-manager/plugin/inserthtml.d.ts +1 -0
  16. package/src/editor-manager/plugin/inserthtml.js +25 -3
  17. package/src/editor-manager/plugin/lists.js +14 -4
  18. package/src/markdown-parser/base/constant.d.ts +6 -0
  19. package/src/markdown-parser/base/constant.js +6 -0
  20. package/src/markdown-parser/base/markdown-parser.d.ts +2 -0
  21. package/src/markdown-parser/base/markdown-parser.js +6 -0
  22. package/src/markdown-parser/base/types.d.ts +1 -1
  23. package/src/markdown-parser/plugin/insert-text.d.ts +22 -0
  24. package/src/markdown-parser/plugin/insert-text.js +51 -0
  25. package/src/rich-text-editor/actions/color-picker.js +20 -4
  26. package/src/rich-text-editor/actions/full-screen.js +4 -2
  27. package/src/rich-text-editor/actions/resize.js +4 -3
  28. package/src/rich-text-editor/actions/toolbar.js +4 -2
  29. package/src/rich-text-editor/base/classes.d.ts +5 -0
  30. package/src/rich-text-editor/base/classes.js +5 -0
  31. package/src/rich-text-editor/base/constant.d.ts +46 -1
  32. package/src/rich-text-editor/base/constant.js +46 -1
  33. package/src/rich-text-editor/base/interface.d.ts +2 -0
  34. package/src/rich-text-editor/base/rich-text-editor.d.ts +1 -0
  35. package/src/rich-text-editor/base/rich-text-editor.js +34 -27
  36. package/src/rich-text-editor/base/util.js +10 -6
  37. package/src/rich-text-editor/formatter/formatter.js +1 -1
  38. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  39. package/src/rich-text-editor/renderer/image-module.d.ts +1 -0
  40. package/src/rich-text-editor/renderer/image-module.js +58 -44
  41. package/src/rich-text-editor/renderer/link-module.js +16 -14
  42. package/src/rich-text-editor/renderer/markdown-renderer.js +2 -1
  43. package/src/rich-text-editor/renderer/table-module.d.ts +3 -0
  44. package/src/rich-text-editor/renderer/table-module.js +133 -56
  45. package/src/rich-text-editor/renderer/toolbar-renderer.js +13 -2
  46. package/src/rich-text-editor/renderer/view-source.js +1 -1
  47. package/styles/bootstrap-dark.css +49 -0
  48. package/styles/bootstrap.css +49 -0
  49. package/styles/bootstrap4.css +49 -0
  50. package/styles/bootstrap5-dark.css +49 -0
  51. package/styles/bootstrap5.css +49 -0
  52. package/styles/fabric-dark.css +49 -0
  53. package/styles/fabric.css +49 -0
  54. package/styles/fluent-dark.css +53 -3
  55. package/styles/fluent.css +50 -0
  56. package/styles/highcontrast-light.css +49 -0
  57. package/styles/highcontrast.css +49 -0
  58. package/styles/material-dark.css +49 -0
  59. package/styles/material.css +49 -0
  60. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +17 -16
  61. package/styles/rich-text-editor/_bootstrap-definition.scss +17 -16
  62. package/styles/rich-text-editor/_bootstrap4-definition.scss +17 -16
  63. package/styles/rich-text-editor/_bootstrap5-definition.scss +17 -16
  64. package/styles/rich-text-editor/_fabric-dark-definition.scss +17 -16
  65. package/styles/rich-text-editor/_fabric-definition.scss +17 -16
  66. package/styles/rich-text-editor/_fluent-definition.scss +18 -16
  67. package/styles/rich-text-editor/_fusionnew-definition.scss +190 -0
  68. package/styles/rich-text-editor/_highcontrast-definition.scss +17 -16
  69. package/styles/rich-text-editor/_highcontrast-light-definition.scss +17 -16
  70. package/styles/rich-text-editor/_layout.scss +59 -0
  71. package/styles/rich-text-editor/_material-dark-definition.scss +17 -16
  72. package/styles/rich-text-editor/_material-definition.scss +17 -16
  73. package/styles/rich-text-editor/_material3-definition.scss +190 -0
  74. package/styles/rich-text-editor/_tailwind-definition.scss +17 -16
  75. package/styles/rich-text-editor/bootstrap-dark.css +49 -0
  76. package/styles/rich-text-editor/bootstrap.css +49 -0
  77. package/styles/rich-text-editor/bootstrap4.css +49 -0
  78. package/styles/rich-text-editor/bootstrap5-dark.css +49 -0
  79. package/styles/rich-text-editor/bootstrap5.css +49 -0
  80. package/styles/rich-text-editor/fabric-dark.css +49 -0
  81. package/styles/rich-text-editor/fabric.css +49 -0
  82. package/styles/rich-text-editor/fluent-dark.css +53 -3
  83. package/styles/rich-text-editor/fluent.css +50 -0
  84. package/styles/rich-text-editor/highcontrast-light.css +49 -0
  85. package/styles/rich-text-editor/highcontrast.css +49 -0
  86. package/styles/rich-text-editor/icons/_fusionnew.scss +303 -0
  87. package/styles/rich-text-editor/icons/_material3.scss +303 -0
  88. package/styles/rich-text-editor/material-dark.css +49 -0
  89. package/styles/rich-text-editor/material.css +49 -0
  90. package/styles/rich-text-editor/tailwind-dark.css +49 -0
  91. package/styles/rich-text-editor/tailwind.css +49 -0
  92. package/styles/tailwind-dark.css +49 -0
  93. package/styles/tailwind.css +49 -0
@@ -524,11 +524,41 @@ const imageUploadFailed = 'imageUploadFailed';
524
524
  * @deprecated
525
525
  */
526
526
  const imageRemoving = 'imageRemoving';
527
+ /**
528
+ * @hidden
529
+ * @deprecated
530
+ */
531
+ const mediaSelected = 'mediaSelected';
532
+ /**
533
+ * @hidden
534
+ * @deprecated
535
+ */
536
+ const mediaUploading = 'mediaUploading';
537
+ /**
538
+ * @hidden
539
+ * @deprecated
540
+ */
541
+ const mediaUploadSuccess = 'mediaUploadSuccess';
542
+ /**
543
+ * @hidden
544
+ * @deprecated
545
+ */
546
+ const mediaUploadFailed = 'mediaUploadFailed';
547
+ /**
548
+ * @hidden
549
+ * @deprecated
550
+ */
551
+ const mediaRemoving = 'mediaRemoving';
527
552
  /**
528
553
  * @hidden
529
554
  * @deprecated
530
555
  */
531
556
  const afterImageDelete = 'afterImageDelete';
557
+ /**
558
+ * @hidden
559
+ * @deprecated
560
+ */
561
+ const afterMediaDelete = 'afterMediaaDelete';
532
562
  /**
533
563
  * @hidden
534
564
  * @deprecated
@@ -544,6 +574,11 @@ const xhtmlValidation = 'xhtmlValidation';
544
574
  * @deprecated
545
575
  */
546
576
  const beforeImageUpload = 'beforeImageUpload';
577
+ /**
578
+ * @hidden
579
+ * @deprecated
580
+ */
581
+ const beforeMediaUpload = 'beforeMediaUpload';
547
582
  /**
548
583
  * @hidden
549
584
  * @deprecated
@@ -599,6 +634,11 @@ const showImageDialog = 'showImageDialog';
599
634
  * @deprecated
600
635
  */
601
636
  const closeImageDialog = 'closeImageDialog';
637
+ /**
638
+ * @hidden
639
+ * @deprecated
640
+ */
641
+ const closeAudioDialog = 'closeAudioDialog';
602
642
  /**
603
643
  * @hidden
604
644
  * @deprecated
@@ -618,15 +658,19 @@ const bindCssClass = 'closeTableDialog';
618
658
  * @hidden
619
659
  * @deprecated
620
660
  */
621
- const blockInlineEmptyNodes = `address:empty, article:empty, aside:empty, blockquote:empty,
622
- details:empty, dd:empty, div:empty, dl:empty, dt:empty, fieldset:empty, footer:empty,form:empty, h1:empty,
623
- h2:empty, h3:empty, h4:empty, h5:empty, h6:empty, header:empty, hgroup:empty, hr:empty, li:empty, main:empty, nav:empty,
624
- noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty,
625
- a:empty, abbr:empty, acronym:empty, b:empty, bdi:empty, bdo:empty, big:empty, button:empty,
626
- canvas:empty, cite:empty, code:empty, data:empty, datalist:empty, del:empty, dfn:empty, em:empty, font:empty, i:empty, iframe:empty,
627
- ins:empty, kbd:empty, label:empty, map:empty, mark:empty, meter:empty, noscript:empty, object:empty, output:empty, picture:empty, progress:empty,
628
- q:empty, ruby:empty, s:empty, samp:empty, script:empty, select:empty, slot:empty, small:empty, span:empty, strong:empty, strike:empty, sub:empty, sup:empty, svg:empty,
629
- template:empty, textarea:empty, time:empty, u:empty, tt:empty, var:empty, wbr:empty`;
661
+ const blockEmptyNodes = `address:empty, article:empty, aside:empty, blockquote:empty,
662
+ details:empty, dd:empty, div:empty, dl:empty, dt:empty, fieldset:empty, footer:empty,form:empty, h1:empty,
663
+ h2:empty, h3:empty, h4:empty, h5:empty, h6:empty, header:empty, hgroup:empty, li:empty, main:empty, nav:empty,
664
+ noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty`;
665
+ /**
666
+ * @hidden
667
+ * @deprecated
668
+ */
669
+ const inlineEmptyNodes = `a:empty, abbr:empty, acronym:empty, b:empty, bdi:empty, bdo:empty, big:empty, button:empty,
670
+ canvas:empty, cite:empty, code:empty, data:empty, datalist:empty, del:empty, dfn:empty, em:empty, font:empty, i:empty, iframe:empty,
671
+ ins:empty, kbd:empty, label:empty, map:empty, mark:empty, meter:empty, noscript:empty, object:empty, output:empty, picture:empty, progress:empty,
672
+ q:empty, ruby:empty, s:empty, samp:empty, script:empty, select:empty, slot:empty, small:empty, span:empty, strong:empty, strike:empty, sub:empty, sup:empty, svg:empty,
673
+ template:empty, textarea:empty, time:empty, u:empty, tt:empty, var:empty, wbr:empty`;
630
674
 
631
675
  /**
632
676
  * Rich Text Editor classes defined here.
@@ -1171,6 +1215,11 @@ const CLS_RTE_FIXED_TB_EXPAND = 'e-rte-fixed-tb-expand';
1171
1215
  * @deprecated
1172
1216
  */
1173
1217
  const CLS_RTE_TB_ENABLED = 'e-rte-toolbar-enabled';
1218
+ /**
1219
+ * @hidden
1220
+ * @deprecated
1221
+ */
1222
+ const CLS_RTE_RES_WEST = 'e-south-west';
1174
1223
 
1175
1224
  /**
1176
1225
  * Defines types of Render
@@ -2315,7 +2364,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2315
2364
  result = getDropDownValue(formatItems$$1, value, 'subCommand', 'text');
2316
2365
  dropDown.formatDropDown.content = ('<span style="display: inline-flex;' +
2317
2366
  'width:' + e.parent.format.width + '" >' +
2318
- '<span class="e-rte-dropdown-btn-text">'
2367
+ '<span class="e-rte-dropdown-btn-text' + ' ' + e.parent.cssClass + '">'
2319
2368
  + (isNullOrUndefined(result) ? formatContent : result) +
2320
2369
  '</span></span>');
2321
2370
  dropDown.formatDropDown.dataBind();
@@ -2345,7 +2394,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2345
2394
  e.tbElements[j].title = name;
2346
2395
  dropDown.fontNameDropDown.content = ('<span style="display: inline-flex;' +
2347
2396
  'width:' + e.parent.fontFamily.width + '" >' +
2348
- '<span class="e-rte-dropdown-btn-text">'
2397
+ '<span class="e-rte-dropdown-btn-text' + ' ' + e.parent.cssClass + '">'
2349
2398
  + name + '</span></span>');
2350
2399
  dropDown.fontNameDropDown.dataBind();
2351
2400
  break;
@@ -2361,7 +2410,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2361
2410
  result = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\s/g, '') : value), 'value', 'text');
2362
2411
  dropDown.fontSizeDropDown.content = ('<span style="display: inline-flex;' +
2363
2412
  'width:' + e.parent.fontSize.width + '" >' +
2364
- '<span class="e-rte-dropdown-btn-text">'
2413
+ '<span class="e-rte-dropdown-btn-text' + ' ' + e.parent.cssClass + '">'
2365
2414
  + getFormattedFontSize(result) + '</span></span>');
2366
2415
  dropDown.fontSizeDropDown.dataBind();
2367
2416
  break;
@@ -2551,9 +2600,13 @@ function updateTextNode(value, rteObj) {
2551
2600
  let previousParent;
2552
2601
  let insertElem;
2553
2602
  while (tempNode.firstChild) {
2554
- const emptyElem = tempNode.querySelectorAll(blockInlineEmptyNodes);
2555
- for (let i = 0; i < emptyElem.length; i++) {
2556
- emptyElem[i].innerHTML = '<br>';
2603
+ const emptyBlockElem = tempNode.querySelectorAll(blockEmptyNodes);
2604
+ for (let i = 0; i < emptyBlockElem.length; i++) {
2605
+ emptyBlockElem[i].innerHTML = '<br>';
2606
+ }
2607
+ const emptyInlineElem = tempNode.querySelectorAll(inlineEmptyNodes);
2608
+ for (let i = 0; i < emptyInlineElem.length; i++) {
2609
+ emptyInlineElem[i].innerHTML = '&ZeroWidthSpace;';
2557
2610
  }
2558
2611
  if (rteObj.enterKey !== 'BR' && ((tempNode.firstChild.nodeName === '#text' &&
2559
2612
  (tempNode.firstChild.textContent.indexOf('\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||
@@ -2998,6 +3051,7 @@ class ToolbarRenderer {
2998
3051
  const proxy = this;
2999
3052
  let css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');
3000
3053
  css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));
3054
+ css += ' ' + this.parent.cssClass;
3001
3055
  const content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });
3002
3056
  const inlineEle = proxy.parent.createElement('span', { className: args.cssClass });
3003
3057
  let range;
@@ -3185,6 +3239,14 @@ class ToolbarRenderer {
3185
3239
  beforeTileRender: (args) => {
3186
3240
  args.element.classList.add(CLS_COLOR_PALETTE);
3187
3241
  args.element.classList.add(CLS_CUSTOM_TILE);
3242
+ if (!isNullOrUndefined(this.parent.cssClass)) {
3243
+ const allClassName = this.parent.cssClass.split(' ');
3244
+ for (let i = 0; i < allClassName.length; i++) {
3245
+ if (allClassName[i].trim() !== '') {
3246
+ args.element.classList.add(allClassName[i]);
3247
+ }
3248
+ }
3249
+ }
3188
3250
  if (args.value === '') {
3189
3251
  args.element.classList.add(CLS_NOCOLOR_ITEM);
3190
3252
  }
@@ -3199,8 +3261,9 @@ class ToolbarRenderer {
3199
3261
  proxy.parent.notify(selectionRestore, {});
3200
3262
  proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;
3201
3263
  const range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());
3264
+ const closestElement = closest(range.startContainer.parentNode, 'table');
3202
3265
  if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' || range.startContainer.nodeName === 'BODY' ||
3203
- closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor') {
3266
+ closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor' && closest(closestElement, '.' + CLS_RTE)) {
3204
3267
  proxy.parent.notify(tableColorPickerChanged, colorPickerArgs);
3205
3268
  }
3206
3269
  else {
@@ -3220,7 +3283,7 @@ class ToolbarRenderer {
3220
3283
  colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;
3221
3284
  colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :
3222
3285
  this.parent.fontColor.colorCode;
3223
- colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;
3286
+ colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
3224
3287
  colorPicker.createElement = this.parent.createElement;
3225
3288
  colorPicker.appendTo(document.getElementById(args.target));
3226
3289
  return colorPicker;
@@ -4203,7 +4266,8 @@ class Toolbar$2 {
4203
4266
  container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),
4204
4267
  items: this.parent.toolbarSettings.items,
4205
4268
  mode: tBarMode,
4206
- target: ele
4269
+ target: ele,
4270
+ cssClass: this.parent.cssClass
4207
4271
  });
4208
4272
  if (this.parent.toolbarSettings.type === ToolbarType.Expand) {
4209
4273
  addClass([ele], ['e-rte-tb-mobile']);
@@ -4320,7 +4384,8 @@ class Toolbar$2 {
4320
4384
  container: 'toolbar',
4321
4385
  items: this.parent.toolbarSettings.items,
4322
4386
  mode: this.getToolbarMode(),
4323
- target: this.tbElement
4387
+ target: this.tbElement,
4388
+ cssClass: this.parent.cssClass
4324
4389
  });
4325
4390
  if (!this.parent.inlineMode.enable) {
4326
4391
  if (this.parent.toolbarSettings.enableFloating) {
@@ -5038,10 +5103,18 @@ class ColorPickerInput {
5038
5103
  const fontNode = this.parent.createElement('input');
5039
5104
  fontNode.id = targetID;
5040
5105
  fontNode.classList.add(CLS_FONT_COLOR_TARGET);
5106
+ if (!isNullOrUndefined(this.parent.cssClass)) {
5107
+ const allClassName = this.parent.cssClass.split(' ');
5108
+ for (let i = 0; i < allClassName.length; i++) {
5109
+ if (allClassName[i].trim() !== '') {
5110
+ fontNode.classList.add(allClassName[i]);
5111
+ }
5112
+ }
5113
+ }
5041
5114
  document.body.appendChild(fontNode);
5042
5115
  options = {
5043
5116
  cssClass: this.tools[item.toLocaleLowerCase()].icon
5044
- + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS,
5117
+ + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS + ' ' + this.parent.cssClass,
5045
5118
  value: this.tools[item.toLocaleLowerCase()].value,
5046
5119
  command: this.tools[item.toLocaleLowerCase()].command,
5047
5120
  subCommand: this.tools[item.toLocaleLowerCase()].subCommand,
@@ -5057,10 +5130,18 @@ class ColorPickerInput {
5057
5130
  const backNode = this.parent.createElement('input');
5058
5131
  backNode.id = targetID;
5059
5132
  backNode.classList.add(CLS_BACKGROUND_COLOR_TARGET);
5133
+ if (!isNullOrUndefined(this.parent.cssClass)) {
5134
+ const allClassName = this.parent.cssClass.split(' ');
5135
+ for (let i = 0; i < allClassName.length; i++) {
5136
+ if (allClassName[i].trim() !== '') {
5137
+ backNode.classList.add(allClassName[i]);
5138
+ }
5139
+ }
5140
+ }
5060
5141
  document.body.appendChild(backNode);
5061
5142
  options = {
5062
5143
  cssClass: this.tools[item.toLocaleLowerCase()].icon
5063
- + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS,
5144
+ + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS + ' ' + this.parent.cssClass,
5064
5145
  value: this.tools[item.toLocaleLowerCase()].value,
5065
5146
  command: this.tools[item.toLocaleLowerCase()].command,
5066
5147
  subCommand: this.tools[item.toLocaleLowerCase()].subCommand,
@@ -5133,8 +5214,8 @@ class ColorPickerInput {
5133
5214
  dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass + ' ' + e.cssClass).trim() });
5134
5215
  }
5135
5216
  else {
5136
- colorPickerObj.setProperties({ cssClass: (colorPickerObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });
5137
- dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass.replace(e.oldCssClass, '').trim() + ' ' + e.cssClass).trim() });
5217
+ colorPickerObj.setProperties({ cssClass: (colorPickerObj.cssClass.replace(e.oldCssClass, '').replace(' ', ' ').trim() + ' ' + e.cssClass).trim() });
5218
+ dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass.replace(e.oldCssClass, '').replace(' ', ' ').trim() + ' ' + e.cssClass).trim() });
5138
5219
  }
5139
5220
  }
5140
5221
  }
@@ -6586,18 +6667,18 @@ function updateTextNode$1(value) {
6586
6667
  tdElm[j].style.removeProperty('border');
6587
6668
  }
6588
6669
  }
6589
- if (!tableElm[i].classList.contains(CLS_TABLE)) {
6590
- tableElm[i].classList.add(CLS_TABLE);
6670
+ if (!tableElm[i].classList.contains('e-rte-table')) {
6671
+ tableElm[i].classList.add('e-rte-table');
6591
6672
  }
6592
6673
  }
6593
6674
  const imageElm = resultElm.querySelectorAll('img');
6594
6675
  for (let i = 0; i < imageElm.length; i++) {
6595
- if (!imageElm[i].classList.contains(CLS_RTE_IMAGE)) {
6596
- imageElm[i].classList.add(CLS_RTE_IMAGE);
6676
+ if (!imageElm[i].classList.contains('e-rte-image')) {
6677
+ imageElm[i].classList.add('e-rte-image');
6597
6678
  }
6598
- if (!(imageElm[i].classList.contains(CLS_IMGINLINE) ||
6599
- imageElm[i].classList.contains(CLS_IMGBREAK))) {
6600
- imageElm[i].classList.add(CLS_IMGINLINE);
6679
+ if (!(imageElm[i].classList.contains('e-imginline') ||
6680
+ imageElm[i].classList.contains('e-imgbreak'))) {
6681
+ imageElm[i].classList.add('e-imginline');
6601
6682
  }
6602
6683
  }
6603
6684
  }
@@ -7053,7 +7134,7 @@ class Formatter {
7053
7134
  }
7054
7135
  self.trigger(actionComplete, events, (callbackArgs) => {
7055
7136
  self.setPlaceHolder();
7056
- if (callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links' && self.editorMode === 'HTML') {
7137
+ if ((callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links') && self.editorMode === 'HTML') {
7057
7138
  const args = callbackArgs;
7058
7139
  if (callbackArgs.requestType === 'Links' && callbackArgs.event &&
7059
7140
  callbackArgs.event.type === 'keydown' &&
@@ -7156,6 +7237,12 @@ const CLEAR_COMMAND = 'clear-commands';
7156
7237
  * @hidden
7157
7238
  */
7158
7239
  const MD_TABLE = 'insert-table';
7240
+ /**
7241
+ * insertText plugin events
7242
+ *
7243
+ * @hidden
7244
+ */
7245
+ const INSERT_TEXT_COMMAND = 'insert-text';
7159
7246
 
7160
7247
  /**
7161
7248
  * Lists internal component
@@ -8884,6 +8971,55 @@ class ClearFormat {
8884
8971
  }
8885
8972
  }
8886
8973
 
8974
+ /**
8975
+ * Link internal component
8976
+ *
8977
+ * @hidden
8978
+ * @deprecated
8979
+ */
8980
+ class MDInsertText {
8981
+ /**
8982
+ * Constructor for creating the insert text plugin
8983
+ *
8984
+ * @param {MarkdownParser} parent - specifies the parent element
8985
+ * @hidden
8986
+ * @deprecated
8987
+ */
8988
+ constructor(parent) {
8989
+ this.parent = parent;
8990
+ this.selection = this.parent.markdownSelection;
8991
+ this.addEventListener();
8992
+ }
8993
+ addEventListener() {
8994
+ this.parent.observer.on(INSERT_TEXT_COMMAND, this.InsertTextExec, this);
8995
+ }
8996
+ InsertTextExec(e) {
8997
+ const textArea = this.parent.element;
8998
+ textArea.focus();
8999
+ const start = textArea.selectionStart;
9000
+ const end = textArea.selectionEnd;
9001
+ const text = e.value.text;
9002
+ const startOffset = start + text.length;
9003
+ const endOffset = end + text.length;
9004
+ textArea.value = textArea.value.substr(0, start)
9005
+ + text + textArea.value.substr(end, textArea.value.length);
9006
+ this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);
9007
+ this.restore(textArea, startOffset, endOffset, e);
9008
+ }
9009
+ restore(textArea, start, end, event) {
9010
+ this.selection.save(start, end);
9011
+ this.selection.restore(textArea);
9012
+ if (event && event.callBack) {
9013
+ event.callBack({
9014
+ requestType: event.subCommand,
9015
+ selectedText: this.selection.getSelectedText(textArea),
9016
+ editorMode: 'Markdown',
9017
+ event: event.event
9018
+ });
9019
+ }
9020
+ }
9021
+ }
9022
+
8887
9023
  /**
8888
9024
  * MarkdownParser internal component
8889
9025
  *
@@ -8910,6 +9046,7 @@ class MarkdownParser {
8910
9046
  this.linkObj = new MDLink(this);
8911
9047
  this.tableObj = new MDTable({ parent: this, syntaxTag: ({ Formats: this.formatTags, List: this.listTags }) });
8912
9048
  this.clearObj = new ClearFormat(this);
9049
+ this.insertTextObj = new MDInsertText(this);
8913
9050
  this.wireEvents();
8914
9051
  }
8915
9052
  initialize() {
@@ -8976,6 +9113,10 @@ class MarkdownParser {
8976
9113
  case 'clear':
8977
9114
  this.observer.notify(CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });
8978
9115
  break;
9116
+ case 'inserttext':
9117
+ this.observer.notify(INSERT_TEXT_COMMAND, { subCommand: value, event: event, callBack: callBack,
9118
+ value: { text: exeValue } });
9119
+ break;
8979
9120
  }
8980
9121
  }
8981
9122
  }
@@ -9051,7 +9192,8 @@ class MarkdownRender {
9051
9192
  const div = this.parent.createElement('div', { id: this.parent.getID() + '_view', className: 'e-rte-content' });
9052
9193
  this.editableElement = this.parent.createElement('textarea', {
9053
9194
  className: 'e-content',
9054
- id: this.parent.getID() + '_editable-content'
9195
+ id: this.parent.getID() + '_editable-content',
9196
+ attrs: { 'aria-labelledby': this.parent.getID() + '_view' }
9055
9197
  });
9056
9198
  div.appendChild(this.editableElement);
9057
9199
  this.setPanel(div);
@@ -10764,6 +10906,8 @@ class Lists {
10764
10906
  let endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
10765
10907
  startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;
10766
10908
  endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
10909
+ startNode = startNode.nodeName !== 'LI' && !isNullOrUndefined(startNode.closest('LI')) ? startNode.closest('LI') : startNode;
10910
+ endNode = endNode.nodeName !== 'LI' && !isNullOrUndefined(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
10767
10911
  if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
10768
10912
  isNullOrUndefined(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
10769
10913
  isNullOrUndefined(startNode.previousElementSibling) && range.startOffset === 0) ||
@@ -11137,7 +11281,7 @@ class Lists {
11137
11281
  }
11138
11282
  }
11139
11283
  applyLists(elements, type, selector, item, e) {
11140
- if (this.isRevert(elements, type) && isNullOrUndefined(item)) {
11284
+ if (this.isRevert(elements, type, item) && isNullOrUndefined(item)) {
11141
11285
  this.revertList(elements, e);
11142
11286
  this.removeEmptyListElements();
11143
11287
  }
@@ -11200,13 +11344,14 @@ class Lists {
11200
11344
  }
11201
11345
  }
11202
11346
  }
11203
- isRevert(nodes, tagName) {
11347
+ isRevert(nodes, tagName, item) {
11204
11348
  let isRevert = true;
11205
11349
  for (let i = 0; i < nodes.length; i++) {
11206
11350
  if (nodes[i].tagName !== 'LI') {
11207
11351
  return false;
11208
11352
  }
11209
- if (nodes[i].parentNode.tagName !== tagName) {
11353
+ if (nodes[i].parentNode.tagName !== tagName ||
11354
+ isNullOrUndefined(item) && nodes[i].parentNode.style.listStyleType !== '') {
11210
11355
  isRevert = false;
11211
11356
  }
11212
11357
  }
@@ -11229,6 +11374,12 @@ class Lists {
11229
11374
  (nodes[i].tagName === 'LI' && node.tagName === tagName && nodesTemp.indexOf(node) < 0 && item !== null)) {
11230
11375
  nodesTemp.push(node);
11231
11376
  }
11377
+ if (isNullOrUndefined(item) && (node.tagName === tagName ||
11378
+ ((node.tagName === 'UL' || node.tagName === 'OL') && node.hasAttribute('style')))) {
11379
+ if (node.hasAttribute('style')) {
11380
+ node.removeAttribute('style');
11381
+ }
11382
+ }
11232
11383
  }
11233
11384
  for (let j = nodesTemp.length - 1; j >= 0; j--) {
11234
11385
  const h = nodesTemp[j];
@@ -11330,7 +11481,8 @@ class Lists {
11330
11481
  }
11331
11482
  }
11332
11483
  }
11333
- if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element), 'LI' === parentNode.parentNode.tagName) {
11484
+ if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element), 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
11485
+ 'UL' === parentNode.parentNode.tagName) {
11334
11486
  element.parentNode.insertBefore(this.closeTag('LI'), element);
11335
11487
  }
11336
11488
  else {
@@ -12288,7 +12440,9 @@ class InsertHtml {
12288
12440
  let isPreviousInlineElem;
12289
12441
  let paraElm;
12290
12442
  let previousParent;
12291
- range.deleteContents();
12443
+ if (!this.contentsDeleted) {
12444
+ range.deleteContents();
12445
+ }
12292
12446
  while (node.firstChild) {
12293
12447
  if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {
12294
12448
  detach(node.firstChild);
@@ -12416,9 +12570,28 @@ class InsertHtml {
12416
12570
  const nodeSelection = new NodeSelection();
12417
12571
  let currentNode = this.getNodeCollection(range, nodeSelection, node)[this.getNodeCollection(range, nodeSelection, node).length - 1];
12418
12572
  let splitedElm;
12419
- if ((currentNode.nodeName === 'BR' || currentNode.nodeName === 'HR') && !isNullOrUndefined(currentNode.parentElement) &&
12420
- currentNode.parentElement.textContent.trim().length === 0) {
12573
+ if ((currentNode.nodeName === 'BR' || currentNode.nodeName === 'HR' ||
12574
+ (currentNode.nodeName === '#text' && !isNullOrUndefined(currentNode.parentElement) && currentNode.parentElement.nodeName === 'LI')) &&
12575
+ (!isNullOrUndefined(currentNode.parentElement) && currentNode.parentElement.textContent.trim().length === 0)) {
12421
12576
  splitedElm = currentNode;
12577
+ if (currentNode.parentElement.nodeName === 'LI' && !isNullOrUndefined(currentNode.nextSibling) &&
12578
+ currentNode.nextSibling.nodeName === 'BR') {
12579
+ detach(currentNode.nextSibling);
12580
+ }
12581
+ }
12582
+ else if (currentNode.nodeName === '#text' && !isNullOrUndefined(currentNode.parentElement) &&
12583
+ currentNode.parentElement.nodeName === 'LI' && currentNode.parentElement.textContent.trim().length > 0) {
12584
+ splitedElm = currentNode;
12585
+ if (currentNode.parentElement.nodeName === 'LI' && !isNullOrUndefined(currentNode.nextSibling) &&
12586
+ currentNode.nextSibling.nodeName === 'BR') {
12587
+ detach(currentNode.nextSibling);
12588
+ }
12589
+ if (!range.collapsed) {
12590
+ range.deleteContents();
12591
+ }
12592
+ range.insertNode(node);
12593
+ this.contentsDeleted = true;
12594
+ return;
12422
12595
  }
12423
12596
  else {
12424
12597
  splitedElm = nodeCutter.GetSpliceNode(range, blockNode);
@@ -12506,6 +12679,7 @@ InsertHtml.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'bi
12506
12679
  'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',
12507
12680
  'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',
12508
12681
  'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];
12682
+ InsertHtml.contentsDeleted = false;
12509
12683
 
12510
12684
  /**
12511
12685
  * Link internal component
@@ -17118,7 +17292,7 @@ const IFRAMEHEADER = `
17118
17292
  h3+h4, h4+h5, h5+h6{margin-top: 00.6em;}
17119
17293
  ul:last-child{margin-bottom: 0;}
17120
17294
  table { border-collapse: collapse; empty-cells: show;}
17121
- table td,table th {border: 1px solid #BDBDBD; height: 20px; vertical-align: middle;}
17295
+ table td,table th {border: 1px solid #BDBDBD; height: 20px; padding: 2px 5px; vertical-align: middle;}
17122
17296
  table.e-alternate-border tbody tr:nth-child(2n) {background-color: #F5F5F5;}
17123
17297
  table th {background-color: #E0E0E0;}
17124
17298
  table.e-dashed-border td,table.e-dashed-border th { border: 1px dashed #BDBDBD}
@@ -19034,9 +19208,10 @@ class Resize {
19034
19208
  this.parent.on(destroy, this.destroy, this);
19035
19209
  }
19036
19210
  renderResizable() {
19211
+ let enableRtlClass = (this.parent.enableRtl) ? CLS_RTE_RES_WEST : CLS_RTE_RES_EAST;
19037
19212
  this.resizer = this.parent.createElement('div', {
19038
19213
  id: this.parent.getID() + '-resizable', className: 'e-icons'
19039
- + ' ' + CLS_RTE_RES_HANDLE + ' ' + CLS_RTE_RES_EAST
19214
+ + ' ' + CLS_RTE_RES_HANDLE + ' ' + enableRtlClass
19040
19215
  });
19041
19216
  this.parent.element.classList.add(CLS_RTE_RES_CNT);
19042
19217
  this.parent.element.appendChild(this.resizer);
@@ -19067,12 +19242,12 @@ class Resize {
19067
19242
  const boundRect = this.parent.element.getBoundingClientRect();
19068
19243
  if (this.isMouseEvent(e)) {
19069
19244
  this.parent.element.style.height = e.clientY - boundRect.top + 'px';
19070
- this.parent.element.style.width = e.clientX - boundRect.left + 'px';
19245
+ this.parent.element.style.width = (!this.parent.enableRtl) ? e.clientX - boundRect.left + 'px' : boundRect.right - e.clientX + 'px';
19071
19246
  }
19072
19247
  else {
19073
19248
  const eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;
19074
19249
  this.parent.element.style.height = eventType.clientY - boundRect.top + 'px';
19075
- this.parent.element.style.width = eventType.clientX - boundRect.left + 'px';
19250
+ this.parent.element.style.width = (!this.parent.enableRtl) ? e.clientX - boundRect.left + 'px' : boundRect.right - e.clientX + 'px';
19076
19251
  }
19077
19252
  if (!this.parent.toolbarSettings.enable) {
19078
19253
  this.parent.setContentHeight('', false);
@@ -19420,7 +19595,8 @@ class FullScreen {
19420
19595
  }
19421
19596
  this.parent.element.classList.add(CLS_FULL_SCREEN);
19422
19597
  this.toggleParentOverflow(true);
19423
- this.parent.setContentHeight();
19598
+ let isExpand = this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
19599
+ this.parent.setContentHeight(null, isExpand);
19424
19600
  if (this.parent.toolbarModule) {
19425
19601
  if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {
19426
19602
  this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);
@@ -19466,7 +19642,8 @@ class FullScreen {
19466
19642
  for (let i = 0; i < elem.length; i++) {
19467
19643
  removeClass([elem[i]], ['e-rte-overflow']);
19468
19644
  }
19469
- this.parent.setContentHeight();
19645
+ let isExpand = this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
19646
+ this.parent.setContentHeight(null, isExpand);
19470
19647
  if (this.parent.toolbarModule) {
19471
19648
  if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {
19472
19649
  this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);
@@ -19938,22 +20115,22 @@ class Link {
19938
20115
  const textPlace = this.i10n.getConstant('textPlaceholder');
19939
20116
  const title = this.i10n.getConstant('linkTitle');
19940
20117
  const linkDialogEle = this.parent.createElement('div', {
19941
- className: 'e-rte-link-dialog', id: this.rteID + '_rtelink'
20118
+ className: 'e-rte-link-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_rtelink'
19942
20119
  });
19943
20120
  this.parent.element.appendChild(linkDialogEle);
19944
20121
  const linkContent = this.parent.createElement('div', {
19945
- className: 'e-rte-linkcontent', id: this.rteID + '_linkContent'
20122
+ className: 'e-rte-linkcontent' + ' ' + this.parent.cssClass, id: this.rteID + '_linkContent'
19946
20123
  });
19947
20124
  const htmlTextbox = (this.parent.editorMode === 'HTML') ? '<label>' + linkTooltip +
19948
- '</label></div><div class="e-rte-field">' +
19949
- '<input type="text" data-role ="none" spellcheck="false" placeholder = "' + title + '" class="e-input e-rte-linkTitle"></div>' +
19950
- '<div class="e-rte-label"></div>' + '<div class="e-rte-field">' +
19951
- '<input type="checkbox" class="e-rte-linkTarget" data-role ="none"></div>' : '';
19952
- const content = '<div class="e-rte-label"><label>' + linkWebAddress + '</label></div>' + '<div class="e-rte-field">' +
19953
- '<input type="text" data-role ="none" spellcheck="false" placeholder="' + urlPlace + '" class="e-input e-rte-linkurl"/></div>' +
19954
- '<div class="e-rte-label">' + '<label>' + linkDisplayText + '</label></div><div class="e-rte-field"> ' +
19955
- '<input type="text" data-role ="none" spellcheck="false" class="e-input e-rte-linkText" placeholder="' + textPlace + '">' +
19956
- '</div><div class="e-rte-label">' + htmlTextbox;
20125
+ '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
20126
+ '<input type="text" data-role ="none" spellcheck="false" placeholder = "' + title + '" class="e-input e-rte-linkTitle' + ' ' + this.parent.cssClass + '"></div>' +
20127
+ '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
20128
+ '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>' : '';
20129
+ const content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + linkWebAddress + '</label></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
20130
+ '<input type="text" data-role ="none" spellcheck="false" placeholder="' + urlPlace + '" class="e-input e-rte-linkurl' + ' ' + this.parent.cssClass + '"/></div>' +
20131
+ '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + linkDisplayText + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
20132
+ '<input type="text" data-role ="none" spellcheck="false" class="e-input e-rte-linkText' + ' ' + this.parent.cssClass + '" placeholder="' + textPlace + '">' +
20133
+ '</div><div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + htmlTextbox;
19957
20134
  const contentElem = parseHtml(content);
19958
20135
  linkContent.appendChild(contentElem);
19959
20136
  const linkTarget = linkContent.querySelector('.e-rte-linkTarget');
@@ -19981,9 +20158,9 @@ class Link {
19981
20158
  isModal: Browser.isDevice,
19982
20159
  buttons: [{
19983
20160
  click: this.insertlink.bind(selectObj),
19984
- buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }
20161
+ buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink' + ' ' + this.parent.cssClass, isPrimary: true }
19985
20162
  },
19986
- { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat', content: linkCancel } }],
20163
+ { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat' + ' ' + this.parent.cssClass, content: linkCancel } }],
19987
20164
  target: (Browser.isDevice) ? document.body : this.parent.element,
19988
20165
  animationSettings: { effect: 'None' },
19989
20166
  close: (event) => {
@@ -20127,8 +20304,10 @@ class Link {
20127
20304
  if (this.parent.formatter.getUndoRedoStack().length === 0) {
20128
20305
  this.parent.formatter.saveData();
20129
20306
  }
20307
+ const selectParentEle = this.getAnchorNode(e.selectParent[0]);
20130
20308
  this.parent.formatter.process(this.parent, e.args, e.args, {
20131
20309
  selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,
20310
+ text: selectParentEle.innerText,
20132
20311
  subCommand: e.args.item.subCommand
20133
20312
  });
20134
20313
  if (isIDevice$1() && this.parent.iframeSettings.enable) {
@@ -20143,7 +20322,7 @@ class Link {
20143
20322
  const selectParentEle = this.getAnchorNode(e.selectParent[0]);
20144
20323
  if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {
20145
20324
  this.parent.formatter.process(this.parent, e.args, e.args, {
20146
- url: selectParentEle.href,
20325
+ url: selectParentEle.href, text: selectParentEle.innerText,
20147
20326
  target: selectParentEle.target === '' ? '_self' : '_blank', selectNode: e.selectNode,
20148
20327
  subCommand: e.args.item.subCommand
20149
20328
  });
@@ -20224,6 +20403,7 @@ class Image {
20224
20403
  this.isAllowedTypes = true;
20225
20404
  this.pageX = null;
20226
20405
  this.pageY = null;
20406
+ this.mousex = null;
20227
20407
  this.deletedImg = [];
20228
20408
  this.parent = parent;
20229
20409
  this.rteID = parent.element.id;
@@ -20461,18 +20641,18 @@ class Image {
20461
20641
  this.resizeBtnInit();
20462
20642
  this.imgEle = e;
20463
20643
  addClass([this.imgEle], 'e-resize');
20464
- this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize', id: this.rteID + '_imgResize' });
20644
+ this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize' + ' ' + this.parent.cssClass, id: this.rteID + '_imgResize' });
20465
20645
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20466
- className: 'e-rte-imageboxmark e-rte-topLeft', styles: 'cursor: nwse-resize'
20646
+ className: 'e-rte-imageboxmark e-rte-topLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
20467
20647
  }));
20468
20648
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20469
- className: 'e-rte-imageboxmark e-rte-topRight', styles: 'cursor: nesw-resize'
20649
+ className: 'e-rte-imageboxmark e-rte-topRight' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
20470
20650
  }));
20471
20651
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20472
- className: 'e-rte-imageboxmark e-rte-botLeft', styles: 'cursor: nesw-resize'
20652
+ className: 'e-rte-imageboxmark e-rte-botLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
20473
20653
  }));
20474
20654
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20475
- className: 'e-rte-imageboxmark e-rte-botRight', styles: 'cursor: nwse-resize'
20655
+ className: 'e-rte-imageboxmark e-rte-botRight' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
20476
20656
  }));
20477
20657
  if (Browser.isDevice) {
20478
20658
  addClass([this.imgResizeDiv], 'e-mob-rte');
@@ -20559,8 +20739,9 @@ class Image {
20559
20739
  img.style.minWidth = this.parent.insertImageSettings.minWidth === 0 ? '20px' : formatUnit(this.parent.insertImageSettings.minWidth);
20560
20740
  if (this.parent.insertImageSettings.resizeByPercent) {
20561
20741
  if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {
20562
- const percentageValue = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement));
20563
- img.style.width = Math.min(Math.round((percentageValue / img.getBoundingClientRect().width) * expectedX * 100) / 100, 100) + '%';
20742
+ var original = img.offsetWidth + this.mousex;
20743
+ var finalWidthByPerc = (original / img.offsetWidth) * (parseFloat(img.style.width).toString() == 'NaN' ? (img.offsetWidth / (parseFloat(getComputedStyle(this.parent.element).width)) * 100) : parseFloat(img.style.width));
20744
+ img.style.width = ((finalWidthByPerc > 3) ? finalWidthByPerc : 3) + '%';
20564
20745
  }
20565
20746
  else {
20566
20747
  img.style.width = this.pixToPerc((width / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';
@@ -20583,13 +20764,20 @@ class Image {
20583
20764
  img.style.height = expectedY + 'px';
20584
20765
  }
20585
20766
  else {
20586
- img.setAttribute('width', ((width / height * expectedY) + width / height).toString());
20767
+ if (this.parent.iframeSettings.enable) {
20768
+ img.setAttribute('width', (img.width + this.mousex).toString());
20769
+ }
20770
+ else {
20771
+ img.setAttribute('width', (img.offsetWidth + this.mousex).toString());
20772
+ }
20587
20773
  }
20588
20774
  }
20589
20775
  else if (height > width) {
20590
20776
  if (this.parent.insertImageSettings.resizeByPercent) {
20591
20777
  if (parseInt('' + img.getBoundingClientRect().width + '', 10) !== 0 && parseInt('' + width + '', 10) !== 0) {
20592
- img.style.width = Math.min(Math.round((width / img.getBoundingClientRect().width) * expectedX * 100) / 100, 100) + '%';
20778
+ var original = img.offsetWidth + this.mousex;
20779
+ var finalWidthByPerc = (original / img.offsetWidth) * (parseFloat(img.style.width).toString() == 'NaN' ? (img.offsetWidth / (parseFloat(getComputedStyle(this.parent.element).width)) * 100) : parseFloat(img.style.width));
20780
+ img.style.width = ((finalWidthByPerc > 3) ? finalWidthByPerc : 3) + '%';
20593
20781
  }
20594
20782
  else {
20595
20783
  img.style.width = this.pixToPerc((expectedX / height * expectedY), (img.previousElementSibling || img.parentElement)) + '%';
@@ -20655,6 +20843,7 @@ class Image {
20655
20843
  const mouseY = (this.resizeBtnStat.topLeft || this.resizeBtnStat.topRight) ? -(pageY - this.pageY) : (pageY - this.pageY);
20656
20844
  const width = parseInt(this.imgDupPos.width, 10) + mouseX;
20657
20845
  const height = parseInt(this.imgDupPos.height, 10) + mouseY;
20846
+ this.mousex = mouseX;
20658
20847
  this.pageX = pageX;
20659
20848
  this.pageY = pageY;
20660
20849
  if (this.resizeBtnStat.botRight) {
@@ -21134,12 +21323,12 @@ class Image {
21134
21323
  }
21135
21324
  this.imagDialog(e);
21136
21325
  if (!isNullOrUndefined(this.dialogObj)) {
21137
- const linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });
21326
+ const linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' + ' ' + this.parent.cssClass });
21138
21327
  const linkUrl = this.i10n.getConstant('linkurl');
21139
- const content = '<div class="e-rte-field">' +
21140
- '<input type="text" data-role ="none" class="e-input e-img-link" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
21328
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
21329
+ '<input type="text" data-role ="none" class="e-input e-img-link' + ' ' + this.parent.cssClass + '" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
21141
21330
  '<div class="e-rte-label"></div>' + '<div class="e-rte-field">' +
21142
- '<input type="checkbox" class="e-rte-linkTarget" data-role ="none"></div>';
21331
+ '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>';
21143
21332
  const contentElem = parseHtml(content);
21144
21333
  linkWrap.appendChild(contentElem);
21145
21334
  const linkTarget = linkWrap.querySelector('.e-rte-linkTarget');
@@ -21178,9 +21367,10 @@ class Image {
21178
21367
  this.insertlink(linkargs);
21179
21368
  },
21180
21369
  buttonModel: {
21181
- content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true
21370
+ content: linkUpdate, cssClass: 'e-flat e-update-link' + ' ' + this.parent.cssClass, isPrimary: true
21182
21371
  }
21183
- }]
21372
+ }],
21373
+ cssClass: this.dialogObj.cssClass + ' e-rte-img-link-dialog'
21184
21374
  });
21185
21375
  if (!isNullOrUndefined(this.parent.cssClass)) {
21186
21376
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
@@ -21202,13 +21392,13 @@ class Image {
21202
21392
  this.imagDialog(e);
21203
21393
  const altText = this.i10n.getConstant('altText');
21204
21394
  if (!isNullOrUndefined(this.dialogObj)) {
21205
- const altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });
21395
+ const altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' + ' ' + this.parent.cssClass });
21206
21396
  const altHeader = this.i10n.getConstant('alternateHeader');
21207
21397
  const linkUpdate = this.i10n.getConstant('dialogUpdate');
21208
21398
  const getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :
21209
21399
  e.selectNode[0].getAttribute('alt');
21210
- const content = '<div class="e-rte-field">' +
21211
- '<input type="text" spellcheck="false" value="' + getAlt + '" class="e-input e-img-alt" placeholder="' + altText + '"/>' +
21400
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
21401
+ '<input type="text" spellcheck="false" value="' + getAlt + '" class="e-input e-img-alt' + ' ' + this.parent.cssClass + '" placeholder="' + altText + '"/>' +
21212
21402
  '</div>';
21213
21403
  const contentElem = parseHtml(content);
21214
21404
  altWrap.appendChild(contentElem);
@@ -21225,9 +21415,10 @@ class Image {
21225
21415
  this.insertAlt(altArgs);
21226
21416
  },
21227
21417
  buttonModel: {
21228
- content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true
21418
+ content: linkUpdate, cssClass: 'e-flat e-update-alt' + ' ' + this.parent.cssClass, isPrimary: true
21229
21419
  }
21230
- }]
21420
+ }],
21421
+ cssClass: this.dialogObj.cssClass + ' e-rte-img-alt-dialog'
21231
21422
  });
21232
21423
  if (!isNullOrUndefined(this.parent.cssClass)) {
21233
21424
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
@@ -21391,11 +21582,11 @@ class Image {
21391
21582
  }
21392
21583
  else {
21393
21584
  this.captionEle = this.parent.createElement('span', {
21394
- className: CLS_CAPTION + ' ' + CLS_RTE_CAPTION,
21585
+ className: CLS_CAPTION + ' ' + CLS_RTE_CAPTION + ' ' + this.parent.cssClass,
21395
21586
  attrs: { contenteditable: 'false', draggable: 'false', style: 'width:' + this.parent.insertImageSettings.width }
21396
21587
  });
21397
- const imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });
21398
- const imgInner = this.parent.createElement('span', { className: 'e-img-inner',
21588
+ const imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' + ' ' + this.parent.cssClass });
21589
+ const imgInner = this.parent.createElement('span', { className: 'e-img-inner' + ' ' + this.parent.cssClass,
21399
21590
  attrs: { contenteditable: 'true' } });
21400
21591
  const parent = e.selectNode[0].parentElement;
21401
21592
  if (parent.tagName === 'A') {
@@ -21447,9 +21638,10 @@ class Image {
21447
21638
  this.insertSize(selectObj);
21448
21639
  },
21449
21640
  buttonModel: {
21450
- content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true
21641
+ content: linkUpdate, cssClass: 'e-flat e-update-size' + ' ' + this.parent.cssClass, isPrimary: true
21451
21642
  }
21452
- }]
21643
+ }],
21644
+ cssClass: this.dialogObj.cssClass + ' e-rte-img-size-dialog'
21453
21645
  });
21454
21646
  if (!isNullOrUndefined(this.parent.cssClass)) {
21455
21647
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
@@ -21491,7 +21683,7 @@ class Image {
21491
21683
  this.dialogObj.hide({ returnValue: true });
21492
21684
  return;
21493
21685
  }
21494
- const imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });
21686
+ const imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_image' });
21495
21687
  this.parent.element.appendChild(imgDialog);
21496
21688
  const imgInsert = this.i10n.getConstant('dialogInsert');
21497
21689
  const imglinkCancel = this.i10n.getConstant('dialogCancel');
@@ -21500,7 +21692,7 @@ class Image {
21500
21692
  const selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };
21501
21693
  const dialogModel = {
21502
21694
  header: imgHeader,
21503
- cssClass: CLS_RTE_ELEMENTS,
21695
+ cssClass: CLS_RTE_ELEMENTS + ' ' + this.parent.cssClass,
21504
21696
  enableRtl: this.parent.enableRtl,
21505
21697
  locale: this.parent.locale,
21506
21698
  showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'inherit',
@@ -21508,13 +21700,13 @@ class Image {
21508
21700
  isModal: Browser.isDevice,
21509
21701
  buttons: [{
21510
21702
  click: this.insertImageUrl.bind(selectObj),
21511
- buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true, disabled: true }
21703
+ buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + ' ' + this.parent.cssClass, isPrimary: true, disabled: true }
21512
21704
  },
21513
21705
  {
21514
21706
  click: (e) => {
21515
21707
  this.cancelDialog(e);
21516
21708
  },
21517
- buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }
21709
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: imglinkCancel }
21518
21710
  }],
21519
21711
  target: (Browser.isDevice) ? document.body : this.parent.element,
21520
21712
  animationSettings: { effect: 'None' },
@@ -21537,12 +21729,12 @@ class Image {
21537
21729
  this.dialogObj = null;
21538
21730
  }
21539
21731
  };
21540
- const dialogContent = this.parent.createElement('div', { className: 'e-img-content' });
21732
+ const dialogContent = this.parent.createElement('div', { className: 'e-img-content' + ' ' + this.parent.cssClass });
21541
21733
  if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
21542
21734
  || this.parent.editorMode === 'HTML') {
21543
21735
  dialogContent.appendChild(this.imgUpload(e));
21544
21736
  }
21545
- const linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });
21737
+ const linkHeader = this.parent.createElement('div', { className: 'e-linkheader' + ' ' + this.parent.cssClass });
21546
21738
  const linkHeaderText = this.i10n.getConstant('imageLinkHeader');
21547
21739
  if (this.parent.editorMode === 'HTML') {
21548
21740
  linkHeader.innerHTML = linkHeaderText;
@@ -21614,7 +21806,8 @@ class Image {
21614
21806
  }
21615
21807
  /* eslint-enable */
21616
21808
  }
21617
- if (!(this.parent.iframeSettings.enable && this.parent.currentTarget.nodeName === 'IMG') && e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&
21809
+ if (!(this.parent.iframeSettings.enable && !isNullOrUndefined(this.parent.currentTarget) && this.parent.currentTarget.nodeName === 'IMG') &&
21810
+ e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&
21618
21811
  this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&
21619
21812
  this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {
21620
21813
  this.cancelResizeAction();
@@ -21643,10 +21836,10 @@ class Image {
21643
21836
  }
21644
21837
  // eslint-disable-next-line
21645
21838
  imageUrlPopup(e) {
21646
- const imgUrl = this.parent.createElement('div', { className: 'imgUrl' });
21839
+ const imgUrl = this.parent.createElement('div', { className: 'imgUrl' + ' ' + this.parent.cssClass });
21647
21840
  const placeUrl = this.i10n.getConstant('imageUrl');
21648
21841
  this.inputUrl = this.parent.createElement('input', {
21649
- className: 'e-input e-img-url',
21842
+ className: 'e-input e-img-url' + ' ' + this.parent.cssClass,
21650
21843
  attrs: { placeholder: placeUrl, spellcheck: 'false' }
21651
21844
  });
21652
21845
  this.inputUrl.addEventListener('input', () => {
@@ -21712,7 +21905,7 @@ class Image {
21712
21905
  const selectNode = e.selectNode[0];
21713
21906
  const imgHeight = this.i10n.getConstant('imageHeight');
21714
21907
  const imgWidth = this.i10n.getConstant('imageWidth');
21715
- const imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });
21908
+ const imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' + ' ' + this.parent.cssClass });
21716
21909
  const widthVal = isNullOrUndefined(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||
21717
21910
  selectNode.style.width !== '') ? selectNode.style.width : !isNullOrUndefined(this.changedWidthValue) ?
21718
21911
  this.changedWidthValue : (parseInt(selectNode.getClientRects()[0].width.toString(), 10)).toString();
@@ -21721,12 +21914,12 @@ class Image {
21721
21914
  this.changedHeightValue : (parseInt(selectNode.getClientRects()[0].height.toString(), 10)).toString();
21722
21915
  this.changedWidthValue = null;
21723
21916
  this.changedHeightValue = null;
21724
- const content = '<div class="e-rte-label"><label>' + imgWidth +
21725
- '</label></div><div class="e-rte-field"><input type="text" id="imgwidth" class="e-img-width" value=' +
21917
+ const content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + imgWidth +
21918
+ '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" id="imgwidth" class="e-img-width' + ' ' + this.parent.cssClass + '" value=' +
21726
21919
  widthVal
21727
21920
  + ' /></div>' +
21728
- '<div class="e-rte-label">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field"> ' +
21729
- '<input type="text" id="imgheight" class="e-img-height" value=' +
21921
+ '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
21922
+ '<input type="text" id="imgheight" class="e-img-height' + ' ' + this.parent.cssClass + '" value=' +
21730
21923
  heightVal
21731
21924
  + ' /></div>';
21732
21925
  const contentElem = parseHtml(content);
@@ -21815,16 +22008,16 @@ class Image {
21815
22008
  save = e.selection;
21816
22009
  selectParent = e.selectParent;
21817
22010
  }
21818
- const uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });
22011
+ const uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' + ' ' + this.parent.cssClass });
21819
22012
  const deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');
21820
22013
  const imgUpMsg = this.i10n.getConstant('imageUploadMessage');
21821
- const span = this.parent.createElement('span', { className: 'e-droptext' });
22014
+ const span = this.parent.createElement('span', { className: 'e-droptext' + ' ' + this.parent.cssClass });
21822
22015
  const spanMsg = this.parent.createElement('span', {
21823
- className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
22016
+ className: 'e-rte-upload-text' + ' ' + this.parent.cssClass, innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
21824
22017
  });
21825
22018
  span.appendChild(spanMsg);
21826
22019
  const btnEle = this.parent.createElement('button', {
21827
- className: 'e-browsebtn', id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
22020
+ className: 'e-browsebtn' + ' ' + this.parent.cssClass, id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
21828
22021
  });
21829
22022
  span.appendChild(btnEle);
21830
22023
  uploadParentEle.appendChild(span);
@@ -21836,7 +22029,7 @@ class Image {
21836
22029
  const btnClick = (Browser.isDevice) ? span : btnEle;
21837
22030
  EventHandler.add(btnClick, 'click', this.fileSelect, this);
21838
22031
  const uploadEle = this.parent.createElement('input', {
21839
- id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }
22032
+ id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }, className: this.parent.cssClass
21840
22033
  });
21841
22034
  uploadParentEle.appendChild(uploadEle);
21842
22035
  let altText;
@@ -22518,7 +22711,7 @@ class ViewSource {
22518
22711
  this.parent.formatter.editorManager.observer.off(KEY_DOWN_HANDLER, this.onKeyDown);
22519
22712
  }
22520
22713
  getSourceCode() {
22521
- return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' });
22714
+ return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' + ' ' + this.parent.cssClass });
22522
22715
  }
22523
22716
  wireEvent(element) {
22524
22717
  this.keyboardModule = new KeyboardEvents$1(element, {
@@ -22749,6 +22942,8 @@ class Table {
22749
22942
  this.pageX = null;
22750
22943
  this.pageY = null;
22751
22944
  this.moveEle = null;
22945
+ this.currentColumnResize = '';
22946
+ this.currentMarginLeft = 0;
22752
22947
  this.parent = parent;
22753
22948
  this.rteID = parent.element.id;
22754
22949
  this.l10n = serviceLocator.getService('rteLocale');
@@ -22916,6 +23111,7 @@ class Table {
22916
23111
  }
22917
23112
  else if (ele && ele.querySelectorAll('table').length > 0) {
22918
23113
  this.removeResizeElement();
23114
+ this.hideTableQuickToolbar();
22919
23115
  }
22920
23116
  }
22921
23117
  if (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') {
@@ -23292,7 +23488,7 @@ class Table {
23292
23488
  }
23293
23489
  tableResizeEleCreation(table, e) {
23294
23490
  this.parent.preventDefaultResize(e);
23295
- const columns = Array.prototype.slice.call(table.rows[this.calMaxCol(table)].cells, 1);
23491
+ const columns = table.rows[this.calMaxCol(table)].cells;
23296
23492
  const rows = [];
23297
23493
  for (let i = 0; i < table.rows.length; i++) {
23298
23494
  rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);
@@ -23300,15 +23496,21 @@ class Table {
23300
23496
  const height = parseInt(getComputedStyle(table).height, 10);
23301
23497
  const width = parseInt(getComputedStyle(table).width, 10);
23302
23498
  const pos = this.calcPos(table);
23303
- for (let i = 0; columns.length > i; i++) {
23499
+ for (let i = 0; columns.length >= i; i++) {
23304
23500
  const colReEle = this.parent.createElement('span', {
23305
23501
  attrs: {
23306
- 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'
23502
+ 'data-col': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'
23307
23503
  }
23308
23504
  });
23309
23505
  colReEle.classList.add(CLS_RTE_TABLE_RESIZE, CLS_TB_COL_RES);
23310
- colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +
23311
- 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';
23506
+ if (columns.length === i) {
23507
+ colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +
23508
+ 'px; left:' + (pos.left + this.calcPos(columns[i - 1]).left + columns[i - 1].offsetWidth) + 'px;';
23509
+ }
23510
+ else {
23511
+ colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +
23512
+ 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';
23513
+ }
23312
23514
  this.contentModule.getEditPanel().appendChild(colReEle);
23313
23515
  }
23314
23516
  for (let i = 0; rows.length > i; i++) {
@@ -23326,7 +23528,7 @@ class Table {
23326
23528
  this.contentModule.getEditPanel().appendChild(rowReEle);
23327
23529
  }
23328
23530
  const tableReBox = this.parent.createElement('span', {
23329
- className: CLS_TB_BOX_RES, attrs: {
23531
+ className: CLS_TB_BOX_RES + ' ' + this.parent.cssClass, attrs: {
23330
23532
  'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'
23331
23533
  }
23332
23534
  });
@@ -23424,7 +23626,19 @@ class Table {
23424
23626
  this.hideTableQuickToolbar();
23425
23627
  if (target.classList.contains(CLS_TB_COL_RES)) {
23426
23628
  this.resizeBtnStat.column = true;
23427
- this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10)];
23629
+ if (parseInt(target.getAttribute('data-col'), 10) === this.curTable.rows[this.calMaxCol(this.curTable)].cells.length) {
23630
+ this.currentColumnResize = 'last';
23631
+ this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10) - 1];
23632
+ }
23633
+ else {
23634
+ if (parseInt(target.getAttribute('data-col'), 10) === 0) {
23635
+ this.currentColumnResize = 'first';
23636
+ }
23637
+ else {
23638
+ this.currentColumnResize = 'middle';
23639
+ }
23640
+ this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10)];
23641
+ }
23428
23642
  this.colIndex = this.columnEle.cellIndex;
23429
23643
  this.moveEle = e.target;
23430
23644
  this.appendHelper();
@@ -23468,7 +23682,7 @@ class Table {
23468
23682
  }
23469
23683
  appendHelper() {
23470
23684
  this.helper = this.parent.createElement('div', {
23471
- className: 'e-table-rhelper'
23685
+ className: 'e-table-rhelper' + ' ' + this.parent.cssClass
23472
23686
  });
23473
23687
  if (Browser.isDevice) {
23474
23688
  this.helper.classList.add('e-reicon');
@@ -23481,7 +23695,8 @@ class Table {
23481
23695
  if (this.resizeBtnStat.column) {
23482
23696
  this.helper.classList.add('e-column-helper');
23483
23697
  this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +
23484
- pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';
23698
+ pos.top + 'px; left:' + ((pos.left + this.calcPos(this.columnEle).left) +
23699
+ (this.currentColumnResize === 'last' ? this.columnEle.offsetWidth + 2 : 0) - 1) + 'px;';
23485
23700
  }
23486
23701
  else {
23487
23702
  this.helper.classList.add('e-row-helper');
@@ -23493,7 +23708,8 @@ class Table {
23493
23708
  updateHelper() {
23494
23709
  const pos = this.calcPos(this.curTable);
23495
23710
  if (this.resizeBtnStat.column) {
23496
- const left = pos.left + this.calcPos(this.columnEle).left - 1;
23711
+ const left = (pos.left + this.calcPos(this.columnEle).left) +
23712
+ (this.currentColumnResize === 'last' ? this.columnEle.offsetWidth + 2 : 0) - 1;
23497
23713
  this.helper.style.left = left + 'px';
23498
23714
  }
23499
23715
  else {
@@ -23515,7 +23731,7 @@ class Table {
23515
23731
  resizing(e) {
23516
23732
  const pageX = this.getPointX(e);
23517
23733
  const pageY = this.getPointY(e);
23518
- const mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);
23734
+ let mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);
23519
23735
  const mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);
23520
23736
  this.pageX = pageX;
23521
23737
  this.pageY = pageY;
@@ -23531,23 +23747,66 @@ class Table {
23531
23747
  const paddingSize = +getComputedStyle(this.contentModule.getEditPanel()).paddingRight.match(/\d/g).join('');
23532
23748
  const rteWidth = this.contentModule.getEditPanel().offsetWidth - (this.contentModule.getEditPanel().offsetWidth -
23533
23749
  this.contentModule.getEditPanel().clientWidth) - paddingSize * 2;
23750
+ let widthCompare;
23751
+ if (!isNullOrUndefined(this.curTable.parentElement.closest('table'))) {
23752
+ const currentTd = this.curTable.closest('td');
23753
+ const currentTDPad = +getComputedStyle(currentTd).paddingRight.match(/\d/g).join('');
23754
+ // Padding of the current table with the parent element multiply with 2.
23755
+ widthCompare = currentTd.offsetWidth - (currentTd.offsetWidth - currentTd.clientWidth) - currentTDPad * 2;
23756
+ }
23757
+ else {
23758
+ widthCompare = rteWidth;
23759
+ }
23534
23760
  if (this.resizeBtnStat.column) {
23535
- const cellColl = this.curTable.rows[this.calMaxCol(this.curTable)].cells;
23536
23761
  const width = parseFloat(this.columnEle.offsetWidth.toString());
23537
- const actualwid = width - mouseX;
23538
- const totalwid = parseFloat(this.columnEle.offsetWidth.toString()) +
23539
- parseFloat(cellColl[this.colIndex - 1].offsetWidth.toString());
23540
- for (let i = 0; i < this.curTable.rows.length; i++) {
23541
- if ((totalwid - actualwid) > 20 && actualwid > 20) {
23542
- const leftColumnWidth = totalwid - actualwid;
23543
- const rightColWidth = actualwid;
23544
- if (!isNullOrUndefined(this.curTable.rows[i].cells[this.colIndex - 1])) {
23545
- this.curTable.rows[i].cells[this.colIndex - 1].style.width =
23546
- this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';
23762
+ let cellRow = this.curTable.rows[0].cells[0].nodeName === 'TH' ? 1 : 0;
23763
+ let currentTableWidth = parseFloat(this.curTable.style.width.split('%')[0]);
23764
+ let currentColumnCellWidth = parseFloat(this.curTable.rows[cellRow].cells[this.colIndex].style.width.split('%')[0]);
23765
+ if (this.currentColumnResize === 'first') {
23766
+ mouseX = mouseX - 0.75; //This was done for to make the gripper and the table first/last column will be close.
23767
+ this.removeResizeElement();
23768
+ // Below the value '100' is the 100% width of the parent element.
23769
+ if (((mouseX !== 0 && 5 < currentColumnCellWidth) || mouseX < 0) && currentTableWidth <= 100 && this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) <= 100) {
23770
+ const firstColumnsCell = this.findFirstLastColCells(this.curTable, true);
23771
+ this.curTable.style.width = this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) > 100 ? (100 + '%') : (this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) + '%');
23772
+ let differenceWidth = currentTableWidth - this.convertPixelToPercentage(tableWidth - mouseX, widthCompare);
23773
+ this.currentMarginLeft = this.currentMarginLeft + differenceWidth;
23774
+ this.curTable.style.marginLeft = 'calc(' + (this.curTable.style.width === '100%' ? 0 : this.currentMarginLeft) + '%)';
23775
+ for (let i = 0; i < firstColumnsCell.length; i++) {
23776
+ this.curTable.rows[i].cells[this.colIndex].style.width = (currentColumnCellWidth - differenceWidth) + '%';
23777
+ }
23778
+ }
23779
+ }
23780
+ else if (this.currentColumnResize === 'last') {
23781
+ mouseX = mouseX + 0.75; //This was done for to make the gripper and the table first/last column will be close.
23782
+ this.removeResizeElement();
23783
+ // Below the value '100' is the 100% width of the parent element.
23784
+ if (((mouseX !== 0 && 5 < currentColumnCellWidth) || mouseX > 0) && currentTableWidth <= 100 && this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) <= 100) {
23785
+ const lastColumnsCell = this.findFirstLastColCells(this.curTable, false);
23786
+ this.curTable.style.width = this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) > 100 ? (100 + '%') : (this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) + '%');
23787
+ let differenceWidth = currentTableWidth - this.convertPixelToPercentage(tableWidth + mouseX, widthCompare);
23788
+ for (let i = 0; i < lastColumnsCell.length; i++) {
23789
+ this.curTable.rows[i].cells[this.colIndex].style.width = (currentColumnCellWidth - differenceWidth) + '%';
23547
23790
  }
23548
- if (!isNullOrUndefined(this.curTable.rows[i].cells[this.colIndex])) {
23549
- this.curTable.rows[i].cells[this.colIndex].style.width =
23550
- this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';
23791
+ }
23792
+ }
23793
+ else {
23794
+ const cellColl = this.curTable.rows[this.calMaxCol(this.curTable)].cells;
23795
+ const actualwid = width - mouseX;
23796
+ const totalwid = parseFloat(this.columnEle.offsetWidth.toString()) +
23797
+ parseFloat(cellColl[this.colIndex - 1].offsetWidth.toString());
23798
+ for (let i = 0; i < this.curTable.rows.length; i++) {
23799
+ if ((totalwid - actualwid) > 20 && actualwid > 20) {
23800
+ const leftColumnWidth = totalwid - actualwid;
23801
+ const rightColWidth = actualwid;
23802
+ if (!isNullOrUndefined(this.curTable.rows[i].cells[this.colIndex - 1])) {
23803
+ this.curTable.rows[i].cells[this.colIndex - 1].style.width =
23804
+ this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';
23805
+ }
23806
+ if (!isNullOrUndefined(this.curTable.rows[i].cells[this.colIndex])) {
23807
+ this.curTable.rows[i].cells[this.colIndex].style.width =
23808
+ this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';
23809
+ }
23551
23810
  }
23552
23811
  }
23553
23812
  }
@@ -23571,7 +23830,7 @@ class Table {
23571
23830
  EventHandler.remove(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper);
23572
23831
  }
23573
23832
  const widthType = this.curTable.style.width.indexOf('%') > -1;
23574
- this.curTable.style.width = widthType ? this.convertPixelToPercentage(tableWidth + mouseX, rteWidth) + '%'
23833
+ this.curTable.style.width = widthType ? this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) + '%'
23575
23834
  : tableWidth + mouseX + 'px';
23576
23835
  this.curTable.style.height = tableHeight + mouseY + 'px';
23577
23836
  tableReBox.classList.add('e-rbox-select');
@@ -23581,6 +23840,17 @@ class Table {
23581
23840
  }
23582
23841
  });
23583
23842
  }
23843
+ findFirstLastColCells(table, isFirst) {
23844
+ let resultColumns = [];
23845
+ const rows = table.querySelectorAll('tr');
23846
+ for (let i = 0; i < rows.length; i++) {
23847
+ if (rows[i].closest('table') === table) {
23848
+ const columns = rows[i].querySelectorAll('th, td');
23849
+ resultColumns.push(isFirst ? columns[0] : columns[columns.length - 1]);
23850
+ }
23851
+ }
23852
+ return resultColumns;
23853
+ }
23584
23854
  convertPixelToPercentage(value, offsetValue) {
23585
23855
  return (value / offsetValue) * 100;
23586
23856
  }
@@ -23599,14 +23869,14 @@ class Table {
23599
23869
  EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);
23600
23870
  }
23601
23871
  this.removeResizeElement();
23602
- if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {
23603
- detach(this.helper);
23604
- this.helper = null;
23605
- }
23606
- this.pageX = null;
23607
- this.pageY = null;
23608
- this.moveEle = null;
23609
23872
  }
23873
+ if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {
23874
+ detach(this.helper);
23875
+ this.helper = null;
23876
+ }
23877
+ this.pageX = null;
23878
+ this.pageY = null;
23879
+ this.moveEle = null;
23610
23880
  const args = { event: e, requestType: 'table' };
23611
23881
  this.parent.trigger(resizeStop, args);
23612
23882
  this.parent.formatter.saveData();
@@ -23660,16 +23930,16 @@ class Table {
23660
23930
  this.hideTableQuickToolbar();
23661
23931
  const header = '1X1';
23662
23932
  const insertbtn = this.l10n.getConstant('inserttablebtn');
23663
- this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup', id: this.rteID + '_table' });
23664
- this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' });
23933
+ this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup' + ' ' + this.parent.cssClass, id: this.rteID + '_table' });
23934
+ this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' + ' ' + this.parent.cssClass });
23665
23935
  this.tblHeader.innerHTML = header;
23666
23936
  this.dlgDiv.appendChild(this.tblHeader);
23667
- const tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' });
23937
+ const tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' + ' ' + this.parent.cssClass });
23668
23938
  this.drawTable(tableDiv, args);
23669
23939
  this.dlgDiv.appendChild(tableDiv);
23670
- this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' }));
23940
+ this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' + ' ' + this.parent.cssClass }));
23671
23941
  const btnEle = this.parent.createElement('button', {
23672
- className: 'e-insert-table-btn', id: this.rteID + '_insertTable',
23942
+ className: 'e-insert-table-btn' + ' ' + this.parent.cssClass, id: this.rteID + '_insertTable',
23673
23943
  attrs: { type: 'button', tabindex: '0' }
23674
23944
  });
23675
23945
  if (!isNullOrUndefined(this.parent.getToolbarElement().querySelector('.e-expended-nav'))) {
@@ -23731,7 +24001,7 @@ class Table {
23731
24001
  !target.offsetParent.classList.contains('e-quick-dropdown') &&
23732
24002
  !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')
23733
24003
  && !closest(target, '.e-rte-elements')) {
23734
- removeClass(this.parent.element.querySelectorAll('table td'), CLS_TABLE_SEL);
24004
+ removeClass(this.parent.inputElement.querySelectorAll('table td'), CLS_TABLE_SEL);
23735
24005
  if (!Browser.isIE) {
23736
24006
  this.hideTableQuickToolbar();
23737
24007
  }
@@ -23745,10 +24015,10 @@ class Table {
23745
24015
  let rowDiv;
23746
24016
  let tableCell;
23747
24017
  for (let row = 0; row < 3; row++) {
23748
- rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row', attrs: { 'data-column': '' + row } });
24018
+ rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row' + ' ' + this.parent.cssClass, attrs: { 'data-column': '' + row } });
23749
24019
  for (let col = 0; col < 10; col++) {
23750
24020
  const display = (row > 2) ? 'none' : 'inline-block';
23751
- tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default', attrs: { 'data-cell': '' + col } });
24021
+ tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default' + ' ' + this.parent.cssClass, attrs: { 'data-cell': '' + col } });
23752
24022
  rowDiv.appendChild(tableCell);
23753
24023
  tableCell.style.display = display;
23754
24024
  if (col === 0 && row === 0) {
@@ -23771,15 +24041,15 @@ class Table {
23771
24041
  height: 'initial', width: '290px', content: editContent, header: editHeader,
23772
24042
  buttons: [{
23773
24043
  click: this.applyProperties.bind(this, args),
23774
- buttonModel: { content: update, cssClass: 'e-flat e-size-update', isPrimary: true }
24044
+ buttonModel: { content: update, cssClass: 'e-flat e-size-update' + ' ' + this.parent.cssClass, isPrimary: true }
23775
24045
  },
23776
24046
  {
23777
24047
  click: (e) => {
23778
24048
  this.cancelDialog(e);
23779
24049
  },
23780
- buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }
24050
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: cancel }
23781
24051
  }],
23782
- cssClass: this.parent.cssClass
24052
+ cssClass: this.editdlgObj.cssClass + ' e-rte-edit-table-prop-dialog'
23783
24053
  });
23784
24054
  this.editdlgObj.element.style.maxHeight = 'none';
23785
24055
  this.editdlgObj.content.querySelector('input').focus();
@@ -23801,13 +24071,13 @@ class Table {
23801
24071
  height: 'initial', width: '290px', content: dlgContent,
23802
24072
  buttons: [{
23803
24073
  click: proxy.customTable.bind(this, args),
23804
- buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }
24074
+ buttonModel: { content: insert, cssClass: 'e-flat e-insert-table' + ' ' + proxy.parent.cssClass, isPrimary: true }
23805
24075
  },
23806
24076
  {
23807
24077
  click: (e) => {
23808
24078
  proxy.cancelDialog(e);
23809
24079
  },
23810
- buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }
24080
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + proxy.parent.cssClass, content: cancel }
23811
24081
  }]
23812
24082
  });
23813
24083
  if (!isNullOrUndefined(proxy.parent.cssClass)) {
@@ -23819,10 +24089,10 @@ class Table {
23819
24089
  tableCellDlgContent() {
23820
24090
  const tableColumn = this.l10n.getConstant('columns');
23821
24091
  const tableRow = this.l10n.getConstant('rows');
23822
- const tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' });
23823
- const content = '<div class="e-rte-field"><input type="text" '
23824
- + ' data-role ="none" id="tableColumn" class="e-table-column"/></div>'
23825
- + '<div class="e-rte-field"><input type="text" data-role ="none" id="tableRow" class="e-table-row" /></div>';
24092
+ const tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' + ' ' + this.parent.cssClass });
24093
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" '
24094
+ + ' data-role ="none" id="tableColumn" class="e-table-column' + ' ' + this.parent.cssClass + '"/></div>'
24095
+ + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" data-role ="none" id="tableRow" class="e-table-row' + ' ' + this.parent.cssClass + '" /></div>';
23826
24096
  const contentElem = parseHtml(content);
23827
24097
  tableWrap.appendChild(contentElem);
23828
24098
  this.columnTextBox = new NumericTextBox({
@@ -23865,7 +24135,7 @@ class Table {
23865
24135
  return;
23866
24136
  }
23867
24137
  const tableDialog = this.parent.createElement('div', {
23868
- className: 'e-rte-edit-table', id: this.rteID + '_tabledialog'
24138
+ className: 'e-rte-edit-table' + ' ' + this.parent.cssClass, id: this.rteID + '_tabledialog'
23869
24139
  });
23870
24140
  this.parent.element.appendChild(tableDialog);
23871
24141
  const insert = this.l10n.getConstant('dialogInsert');
@@ -23880,13 +24150,13 @@ class Table {
23880
24150
  position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },
23881
24151
  isModal: Browser.isDevice,
23882
24152
  buttons: [{
23883
- buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }
24153
+ buttonModel: { content: insert, cssClass: 'e-flat e-insert-table' + ' ' + this.parent.cssClass, isPrimary: true }
23884
24154
  },
23885
24155
  {
23886
24156
  click: (e) => {
23887
24157
  this.cancelDialog(e);
23888
24158
  },
23889
- buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }
24159
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: cancel }
23890
24160
  }],
23891
24161
  target: (Browser.isDevice) ? document.body : this.parent.element,
23892
24162
  animationSettings: { effect: 'None' },
@@ -23954,13 +24224,13 @@ class Table {
23954
24224
  const tableWidth = this.l10n.getConstant('tableWidth');
23955
24225
  const cellPadding = this.l10n.getConstant('cellpadding');
23956
24226
  const cellSpacing = this.l10n.getConstant('cellspacing');
23957
- const tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });
24227
+ const tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' + ' ' + this.parent.cssClass });
23958
24228
  const widthVal = closest(selectNode, 'table').getClientRects()[0].width;
23959
24229
  const padVal = closest(selectNode, 'td').style.padding;
23960
24230
  const brdSpcVal = closest(selectNode, 'table').getAttribute('cellspacing');
23961
- const content = '<div class="e-rte-field"><input type="text" data-role ="none" id="tableWidth" class="e-table-width" '
23962
- + ' /></div>' + '<div class="e-rte-field"><input type="text" data-role ="none" id="cellPadding" class="e-cell-padding" />'
23963
- + ' </div><div class="e-rte-field"><input type="text" data-role ="none" id="cellSpacing" class="e-cell-spacing" /></div>';
24231
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" data-role ="none" id="tableWidth" class="e-table-width' + ' ' + this.parent.cssClass + '" '
24232
+ + ' /></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" data-role ="none" id="cellPadding" class="e-cell-padding' + ' ' + this.parent.cssClass + '" />'
24233
+ + ' </div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" data-role ="none" id="cellSpacing" class="e-cell-spacing' + ' ' + this.parent.cssClass + '" /></div>';
23964
24234
  const contentElem = parseHtml(content);
23965
24235
  tableWrap.appendChild(contentElem);
23966
24236
  this.tableWidthNum = new NumericTextBox({
@@ -24958,24 +25228,6 @@ var __decorate$1 = (undefined && undefined.__decorate) || function (decorators,
24958
25228
  let RichTextEditor = class RichTextEditor extends Component {
24959
25229
  constructor(options, element) {
24960
25230
  super(options, element);
24961
- this.defaultResetValue = null;
24962
- this.isResizeInitialized = false;
24963
- /**
24964
- * @hidden
24965
- * @deprecated
24966
- */
24967
- this.isFocusOut = false;
24968
- /**
24969
- * @hidden
24970
- * @deprecated
24971
- */
24972
- this.isRTE = false;
24973
- /**
24974
- * @hidden
24975
- * @deprecated
24976
- */
24977
- this.isBlur = true;
24978
- this.needsID = true;
24979
25231
  }
24980
25232
  /**
24981
25233
  * To provide the array of modules needed for component rendering
@@ -25056,6 +25308,14 @@ let RichTextEditor = class RichTextEditor extends Component {
25056
25308
  // eslint-disable-next-line
25057
25309
  (this.enabled) ? this.eventInitializer() : this.unWireEvents();
25058
25310
  }
25311
+ initializeValue() {
25312
+ this.isFocusOut = false;
25313
+ this.isRTE = false;
25314
+ this.isBlur = true;
25315
+ this.needsID = true;
25316
+ this.defaultResetValue = null;
25317
+ this.isResizeInitialized = false;
25318
+ }
25059
25319
  /**
25060
25320
  * For internal use only - Initialize the event handler;
25061
25321
  *
@@ -25064,6 +25324,7 @@ let RichTextEditor = class RichTextEditor extends Component {
25064
25324
  * @private
25065
25325
  */
25066
25326
  preRender() {
25327
+ this.initializeValue();
25067
25328
  this.onBlurHandler = this.blurHandler.bind(this);
25068
25329
  this.onFocusHandler = this.focusHandler.bind(this);
25069
25330
  this.onResizeHandler = this.resizeHandler.bind(this);
@@ -25120,11 +25381,18 @@ let RichTextEditor = class RichTextEditor extends Component {
25120
25381
  }
25121
25382
  else {
25122
25383
  this.valueContainer = this.createElement('textarea', {
25123
- id: this.getID() + '-value'
25384
+ id: this.getID() + '-value',
25385
+ attrs: { 'aria-labelledby': this.getID() }
25124
25386
  });
25125
25387
  }
25126
25388
  this.valueContainer.name = this.getID();
25127
25389
  addClass([this.valueContainer], CLS_RTE_HIDDEN);
25390
+ if (!isNullOrUndefined(this.cssClass)) {
25391
+ let currentClassList = this.cssClass.split(' ');
25392
+ for (let i = 0; i < currentClassList.length; i++) {
25393
+ addClass([this.valueContainer], currentClassList[i]);
25394
+ }
25395
+ }
25128
25396
  this.element.appendChild(this.valueContainer);
25129
25397
  }
25130
25398
  /**
@@ -25383,21 +25651,24 @@ let RichTextEditor = class RichTextEditor extends Component {
25383
25651
  const range = this.getRange();
25384
25652
  const currentStartContainer = range.startContainer;
25385
25653
  const currentEndContainer = range.endContainer;
25386
- let currentStartOffset = range.startOffset;
25387
- let isSameContainer = currentStartContainer === currentEndContainer ? true : false;
25388
- let currentEndOffset;
25654
+ const currentStartOffset = range.startOffset;
25655
+ const isSameContainer = currentStartContainer === currentEndContainer ? true : false;
25389
25656
  const endNode = range.endContainer.nodeName === '#text' ? range.endContainer.parentElement :
25390
25657
  range.endContainer;
25391
- let closestLI = closest(endNode, 'LI');
25658
+ const closestLI = closest(endNode, 'LI');
25392
25659
  if (!isNullOrUndefined(closestLI) && endNode.textContent.length === range.endOffset &&
25393
25660
  !range.collapsed && isNullOrUndefined(endNode.nextElementSibling)) {
25394
- closestLI.textContent = closestLI.textContent.trim();
25395
- currentEndOffset = closestLI.textContent.length - 1;
25661
+ for (let i = 0; i < closestLI.childNodes.length; i++) {
25662
+ if (closestLI.childNodes[i].nodeName === "#text" && closestLI.childNodes[i].textContent.trim().length === 0) {
25663
+ detach(closestLI.childNodes[i]);
25664
+ i--;
25665
+ }
25666
+ }
25396
25667
  let currentLastElem = closestLI;
25397
- while (currentLastElem.nodeName !== '#text') {
25668
+ while (currentLastElem.lastChild !== null && currentLastElem.nodeName !== '#text') {
25398
25669
  currentLastElem = currentLastElem.lastChild;
25399
25670
  }
25400
- this.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), isSameContainer ? currentLastElem : currentStartContainer, currentLastElem, currentStartOffset, currentLastElem.textContent.length);
25671
+ this.formatter.editorManager.nodeSelection.setSelectionText(this.contentModule.getDocument(), isSameContainer ? (currentLastElem.nodeName === 'BR' && !isNullOrUndefined(currentLastElem.previousSibling) ? currentLastElem.previousSibling : currentLastElem) : currentStartContainer, currentLastElem, currentStartOffset, (currentLastElem.nodeName === 'BR' ? 0 : currentLastElem.textContent.length));
25401
25672
  }
25402
25673
  }
25403
25674
  /**
@@ -25762,6 +26033,12 @@ let RichTextEditor = class RichTextEditor extends Component {
25762
26033
  for (let i = 0; i < this.originalElement.classList.length; i++) {
25763
26034
  addClass([this.element], this.originalElement.classList[i]);
25764
26035
  }
26036
+ if (!isNullOrUndefined(this.cssClass)) {
26037
+ let currentClassList = this.cssClass.split(' ');
26038
+ for (let i = 0; i < currentClassList.length; i++) {
26039
+ addClass([this.element], currentClassList[i]);
26040
+ }
26041
+ }
25765
26042
  removeClass([this.element], CLS_RTE_HIDDEN);
25766
26043
  }
25767
26044
  else {
@@ -26136,7 +26413,7 @@ let RichTextEditor = class RichTextEditor extends Component {
26136
26413
  if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {
26137
26414
  if (this.editorMode !== 'Markdown') {
26138
26415
  if (!this.placeHolderWrapper) {
26139
- this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder e-rte-placeholder' });
26416
+ this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder e-rte-placeholder' + ' ' + this.cssClass });
26140
26417
  if (this.inputElement) {
26141
26418
  this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);
26142
26419
  }
@@ -26385,7 +26662,7 @@ let RichTextEditor = class RichTextEditor extends Component {
26385
26662
  this.setProperties({ value: this.valueTemplate });
26386
26663
  }
26387
26664
  else {
26388
- const compiledTemplate = compile(this.valueTemplate)("", this, 'valueTemplate');
26665
+ const compiledTemplate = compile(this.valueTemplate)('', this, 'valueTemplate');
26389
26666
  for (let i = 0; i < compiledTemplate.length; i++) {
26390
26667
  const item = compiledTemplate[i];
26391
26668
  append([item], this.element);
@@ -27335,5 +27612,5 @@ RichTextEditor = __decorate$1([
27335
27612
  * Rich Text Editor component exported items
27336
27613
  */
27337
27614
 
27338
- 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, HTMLFormatter, Formatter, MarkdownFormatter, ContentRender, Render, ToolbarRenderer, Link, Image, ViewSource, Table, DialogRenderer, IframeContentRender, MarkdownRender, PopupRenderer, RichTextEditor, RenderType, ToolbarType, DialogType, executeGroup, created, destroyed, load, initialLoad, contentChanged, initialEnd, iframeMouseDown, destroy, toolbarClick, toolbarRefresh, refreshBegin, toolbarUpdated, bindOnEnd, renderColorPicker, htmlToolbarClick, markdownToolbarClick, destroyColorPicker, modelChanged, keyUp, keyDown, mouseUp, toolbarCreated, toolbarRenderComplete, enableFullScreen, disableFullScreen, dropDownSelect, beforeDropDownItemRender, execCommandCallBack, imageToolbarAction, linkToolbarAction, windowResize, resizeStart, onResize, resizeStop, undo, redo, insertLink, unLink, editLink, openLink, actionBegin, actionComplete, updatedToolbarStatus, actionSuccess, updateToolbarItem, insertImage, insertCompleted, imageLeft, imageRight, imageCenter, imageBreak, imageInline, imageLink, imageAlt, imageDelete, imageCaption, imageSize, 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, pasteClean, enterHandler, beforeDialogOpen, clearDialogObj, dialogOpen, beforeDialogClose, dialogClose, beforeQuickToolbarOpen, quickToolbarOpen, quickToolbarClose, popupHide, imageSelected, imageUploading, imageUploadSuccess, imageUploadFailed, imageRemoving, afterImageDelete, drop, xhtmlValidation, beforeImageUpload, resizeInitialized, renderFileManager, beforeImageDrop, dynamicModule, beforePasteCleanup, afterPasteCleanup, updateTbItemsStatus, showLinkDialog, closeLinkDialog, showImageDialog, closeImageDialog, showTableDialog, closeTableDialog, bindCssClass, blockInlineEmptyNodes, 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_CAPTION, CLS_RTE_CAPTION, CLS_CAPINLINE, CLS_IMGINLINE, 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_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, 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, 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_IMAGE_BREAK, CLASS_CAPTION, CLASS_RTE_CAPTION, CLASS_CAPTION_INLINE, CLASS_IMAGE_INLINE, Lists, markerClassName, DOMNode, Alignments, Indents, Formats, LinkCommand, InsertMethods, InsertTextExec, InsertHtmlExec, InsertHtml, IsFormatted, MsWordPaste, NodeCutter, ImageCommand, SelectionCommands, SelectionBasedExec, ClearFormatExec, UndoRedoManager, TableCommand, statusCollection, ToolbarStatus, NodeSelection, MarkdownParser, LISTS_COMMAND, selectionCommand, LINK_COMMAND, CLEAR_COMMAND, MD_TABLE, 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 };
27615
+ 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, HTMLFormatter, Formatter, MarkdownFormatter, ContentRender, Render, ToolbarRenderer, Link, Image, ViewSource, Table, DialogRenderer, IframeContentRender, MarkdownRender, PopupRenderer, RichTextEditor, RenderType, ToolbarType, DialogType, executeGroup, created, destroyed, load, initialLoad, contentChanged, initialEnd, iframeMouseDown, destroy, toolbarClick, toolbarRefresh, refreshBegin, toolbarUpdated, bindOnEnd, renderColorPicker, htmlToolbarClick, markdownToolbarClick, destroyColorPicker, modelChanged, keyUp, keyDown, mouseUp, toolbarCreated, toolbarRenderComplete, enableFullScreen, disableFullScreen, dropDownSelect, beforeDropDownItemRender, execCommandCallBack, imageToolbarAction, linkToolbarAction, windowResize, resizeStart, onResize, resizeStop, undo, redo, insertLink, unLink, editLink, openLink, actionBegin, actionComplete, updatedToolbarStatus, actionSuccess, updateToolbarItem, insertImage, insertCompleted, imageLeft, imageRight, imageCenter, imageBreak, imageInline, imageLink, imageAlt, imageDelete, imageCaption, imageSize, 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, pasteClean, enterHandler, beforeDialogOpen, clearDialogObj, dialogOpen, beforeDialogClose, dialogClose, beforeQuickToolbarOpen, quickToolbarOpen, quickToolbarClose, popupHide, imageSelected, imageUploading, imageUploadSuccess, imageUploadFailed, imageRemoving, mediaSelected, mediaUploading, mediaUploadSuccess, mediaUploadFailed, mediaRemoving, afterImageDelete, afterMediaDelete, drop, xhtmlValidation, beforeImageUpload, beforeMediaUpload, resizeInitialized, renderFileManager, beforeImageDrop, dynamicModule, beforePasteCleanup, afterPasteCleanup, updateTbItemsStatus, showLinkDialog, closeLinkDialog, showImageDialog, closeImageDialog, closeAudioDialog, showTableDialog, closeTableDialog, bindCssClass, 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_CAPTION, CLS_RTE_CAPTION, CLS_CAPINLINE, CLS_IMGINLINE, 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_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, 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_IMAGE_BREAK, CLASS_CAPTION, CLASS_RTE_CAPTION, CLASS_CAPTION_INLINE, CLASS_IMAGE_INLINE, Lists, markerClassName, DOMNode, Alignments, Indents, Formats, LinkCommand, InsertMethods, InsertTextExec, InsertHtmlExec, InsertHtml, IsFormatted, MsWordPaste, NodeCutter, ImageCommand, SelectionCommands, SelectionBasedExec, ClearFormatExec, UndoRedoManager, TableCommand, statusCollection, ToolbarStatus, 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 };
27339
27616
  //# sourceMappingURL=ej2-richtexteditor.es2015.js.map