@syncfusion/ej2-richtexteditor 20.1.60 → 20.2.38

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 +30 -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 +439 -181
  5. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  6. package/dist/es6/ej2-richtexteditor.es5.js +431 -172
  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/editor-manager/plugin/ms-word-clean-up.js +1 -1
  19. package/src/markdown-parser/base/constant.d.ts +6 -0
  20. package/src/markdown-parser/base/constant.js +6 -0
  21. package/src/markdown-parser/base/markdown-parser.d.ts +2 -0
  22. package/src/markdown-parser/base/markdown-parser.js +6 -0
  23. package/src/markdown-parser/base/types.d.ts +1 -1
  24. package/src/markdown-parser/plugin/insert-text.d.ts +22 -0
  25. package/src/markdown-parser/plugin/insert-text.js +51 -0
  26. package/src/rich-text-editor/actions/color-picker.js +20 -4
  27. package/src/rich-text-editor/actions/full-screen.js +4 -2
  28. package/src/rich-text-editor/actions/resize.js +4 -3
  29. package/src/rich-text-editor/actions/toolbar.js +4 -2
  30. package/src/rich-text-editor/base/classes.d.ts +5 -0
  31. package/src/rich-text-editor/base/classes.js +5 -0
  32. package/src/rich-text-editor/base/constant.d.ts +40 -0
  33. package/src/rich-text-editor/base/constant.js +41 -1
  34. package/src/rich-text-editor/base/interface.d.ts +2 -0
  35. package/src/rich-text-editor/base/rich-text-editor.d.ts +1 -0
  36. package/src/rich-text-editor/base/rich-text-editor.js +32 -25
  37. package/src/rich-text-editor/base/util.js +3 -3
  38. package/src/rich-text-editor/formatter/formatter.js +1 -1
  39. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  40. package/src/rich-text-editor/renderer/image-module.js +44 -40
  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 +11 -1
  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 +50 -0
  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 +50 -0
  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
@@ -619,14 +659,14 @@ const bindCssClass = 'closeTableDialog';
619
659
  * @deprecated
620
660
  */
621
661
  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`;
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, hr:empty, li:empty, main:empty, nav:empty,
664
+ noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty,
665
+ a:empty, abbr:empty, acronym:empty, b:empty, bdi:empty, bdo:empty, big:empty, button:empty,
666
+ canvas:empty, cite:empty, code:empty, data:empty, datalist:empty, del:empty, dfn:empty, em:empty, font:empty, i:empty, iframe:empty,
667
+ ins:empty, kbd:empty, label:empty, map:empty, mark:empty, meter:empty, noscript:empty, object:empty, output:empty, picture:empty, progress:empty,
668
+ 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,
669
+ template:empty, textarea:empty, time:empty, u:empty, tt:empty, var:empty, wbr:empty`;
630
670
 
631
671
  /**
632
672
  * Rich Text Editor classes defined here.
@@ -1171,6 +1211,11 @@ const CLS_RTE_FIXED_TB_EXPAND = 'e-rte-fixed-tb-expand';
1171
1211
  * @deprecated
1172
1212
  */
1173
1213
  const CLS_RTE_TB_ENABLED = 'e-rte-toolbar-enabled';
1214
+ /**
1215
+ * @hidden
1216
+ * @deprecated
1217
+ */
1218
+ const CLS_RTE_RES_WEST = 'e-south-west';
1174
1219
 
1175
1220
  /**
1176
1221
  * Defines types of Render
@@ -2315,7 +2360,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2315
2360
  result = getDropDownValue(formatItems$$1, value, 'subCommand', 'text');
2316
2361
  dropDown.formatDropDown.content = ('<span style="display: inline-flex;' +
2317
2362
  'width:' + e.parent.format.width + '" >' +
2318
- '<span class="e-rte-dropdown-btn-text">'
2363
+ '<span class="e-rte-dropdown-btn-text' + ' ' + e.parent.cssClass + '">'
2319
2364
  + (isNullOrUndefined(result) ? formatContent : result) +
2320
2365
  '</span></span>');
2321
2366
  dropDown.formatDropDown.dataBind();
@@ -2345,7 +2390,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2345
2390
  e.tbElements[j].title = name;
2346
2391
  dropDown.fontNameDropDown.content = ('<span style="display: inline-flex;' +
2347
2392
  'width:' + e.parent.fontFamily.width + '" >' +
2348
- '<span class="e-rte-dropdown-btn-text">'
2393
+ '<span class="e-rte-dropdown-btn-text' + ' ' + e.parent.cssClass + '">'
2349
2394
  + name + '</span></span>');
2350
2395
  dropDown.fontNameDropDown.dataBind();
2351
2396
  break;
@@ -2361,7 +2406,7 @@ function setToolbarStatus(e, isPopToolbar, self) {
2361
2406
  result = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\s/g, '') : value), 'value', 'text');
2362
2407
  dropDown.fontSizeDropDown.content = ('<span style="display: inline-flex;' +
2363
2408
  'width:' + e.parent.fontSize.width + '" >' +
2364
- '<span class="e-rte-dropdown-btn-text">'
2409
+ '<span class="e-rte-dropdown-btn-text' + ' ' + e.parent.cssClass + '">'
2365
2410
  + getFormattedFontSize(result) + '</span></span>');
2366
2411
  dropDown.fontSizeDropDown.dataBind();
2367
2412
  break;
@@ -2998,6 +3043,7 @@ class ToolbarRenderer {
2998
3043
  const proxy = this;
2999
3044
  let css = CLS_RTE_ELEMENTS + ' ' + CLS_TB_BTN + ((this.parent.inlineMode) ? (' ' + CLS_INLINE_DROPDOWN) : '');
3000
3045
  css += (' ' + ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_DROPDOWN : CLS_FONT_COLOR_DROPDOWN));
3046
+ css += ' ' + this.parent.cssClass;
3001
3047
  const content = proxy.parent.createElement('span', { className: CLS_COLOR_CONTENT });
3002
3048
  const inlineEle = proxy.parent.createElement('span', { className: args.cssClass });
3003
3049
  let range;
@@ -3185,6 +3231,14 @@ class ToolbarRenderer {
3185
3231
  beforeTileRender: (args) => {
3186
3232
  args.element.classList.add(CLS_COLOR_PALETTE);
3187
3233
  args.element.classList.add(CLS_CUSTOM_TILE);
3234
+ if (!isNullOrUndefined(this.parent.cssClass)) {
3235
+ const allClassName = this.parent.cssClass.split(' ');
3236
+ for (let i = 0; i < allClassName.length; i++) {
3237
+ if (allClassName[i].trim() !== '') {
3238
+ args.element.classList.add(allClassName[i]);
3239
+ }
3240
+ }
3241
+ }
3188
3242
  if (args.value === '') {
3189
3243
  args.element.classList.add(CLS_NOCOLOR_ITEM);
3190
3244
  }
@@ -3220,7 +3274,7 @@ class ToolbarRenderer {
3220
3274
  colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;
3221
3275
  colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :
3222
3276
  this.parent.fontColor.colorCode;
3223
- colorPicker.cssClass = (item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER;
3277
+ colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
3224
3278
  colorPicker.createElement = this.parent.createElement;
3225
3279
  colorPicker.appendTo(document.getElementById(args.target));
3226
3280
  return colorPicker;
@@ -4203,7 +4257,8 @@ class Toolbar$2 {
4203
4257
  container: ((this.parent.inlineMode.enable) ? 'quick' : 'toolbar'),
4204
4258
  items: this.parent.toolbarSettings.items,
4205
4259
  mode: tBarMode,
4206
- target: ele
4260
+ target: ele,
4261
+ cssClass: this.parent.cssClass
4207
4262
  });
4208
4263
  if (this.parent.toolbarSettings.type === ToolbarType.Expand) {
4209
4264
  addClass([ele], ['e-rte-tb-mobile']);
@@ -4320,7 +4375,8 @@ class Toolbar$2 {
4320
4375
  container: 'toolbar',
4321
4376
  items: this.parent.toolbarSettings.items,
4322
4377
  mode: this.getToolbarMode(),
4323
- target: this.tbElement
4378
+ target: this.tbElement,
4379
+ cssClass: this.parent.cssClass
4324
4380
  });
4325
4381
  if (!this.parent.inlineMode.enable) {
4326
4382
  if (this.parent.toolbarSettings.enableFloating) {
@@ -5038,10 +5094,18 @@ class ColorPickerInput {
5038
5094
  const fontNode = this.parent.createElement('input');
5039
5095
  fontNode.id = targetID;
5040
5096
  fontNode.classList.add(CLS_FONT_COLOR_TARGET);
5097
+ if (!isNullOrUndefined(this.parent.cssClass)) {
5098
+ const allClassName = this.parent.cssClass.split(' ');
5099
+ for (let i = 0; i < allClassName.length; i++) {
5100
+ if (allClassName[i].trim() !== '') {
5101
+ fontNode.classList.add(allClassName[i]);
5102
+ }
5103
+ }
5104
+ }
5041
5105
  document.body.appendChild(fontNode);
5042
5106
  options = {
5043
5107
  cssClass: this.tools[item.toLocaleLowerCase()].icon
5044
- + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS,
5108
+ + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS + ' ' + this.parent.cssClass,
5045
5109
  value: this.tools[item.toLocaleLowerCase()].value,
5046
5110
  command: this.tools[item.toLocaleLowerCase()].command,
5047
5111
  subCommand: this.tools[item.toLocaleLowerCase()].subCommand,
@@ -5057,10 +5121,18 @@ class ColorPickerInput {
5057
5121
  const backNode = this.parent.createElement('input');
5058
5122
  backNode.id = targetID;
5059
5123
  backNode.classList.add(CLS_BACKGROUND_COLOR_TARGET);
5124
+ if (!isNullOrUndefined(this.parent.cssClass)) {
5125
+ const allClassName = this.parent.cssClass.split(' ');
5126
+ for (let i = 0; i < allClassName.length; i++) {
5127
+ if (allClassName[i].trim() !== '') {
5128
+ backNode.classList.add(allClassName[i]);
5129
+ }
5130
+ }
5131
+ }
5060
5132
  document.body.appendChild(backNode);
5061
5133
  options = {
5062
5134
  cssClass: this.tools[item.toLocaleLowerCase()].icon
5063
- + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS,
5135
+ + ' ' + CLS_RTE_ELEMENTS + ' ' + CLS_ICONS + ' ' + this.parent.cssClass,
5064
5136
  value: this.tools[item.toLocaleLowerCase()].value,
5065
5137
  command: this.tools[item.toLocaleLowerCase()].command,
5066
5138
  subCommand: this.tools[item.toLocaleLowerCase()].subCommand,
@@ -5133,8 +5205,8 @@ class ColorPickerInput {
5133
5205
  dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass + ' ' + e.cssClass).trim() });
5134
5206
  }
5135
5207
  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() });
5208
+ colorPickerObj.setProperties({ cssClass: (colorPickerObj.cssClass.replace(e.oldCssClass, '').replace(' ', ' ').trim() + ' ' + e.cssClass).trim() });
5209
+ dropDownObj.setProperties({ cssClass: (dropDownObj.cssClass.replace(e.oldCssClass, '').replace(' ', ' ').trim() + ' ' + e.cssClass).trim() });
5138
5210
  }
5139
5211
  }
5140
5212
  }
@@ -6586,18 +6658,18 @@ function updateTextNode$1(value) {
6586
6658
  tdElm[j].style.removeProperty('border');
6587
6659
  }
6588
6660
  }
6589
- if (!tableElm[i].classList.contains(CLS_TABLE)) {
6590
- tableElm[i].classList.add(CLS_TABLE);
6661
+ if (!tableElm[i].classList.contains('e-rte-table')) {
6662
+ tableElm[i].classList.add('e-rte-table');
6591
6663
  }
6592
6664
  }
6593
6665
  const imageElm = resultElm.querySelectorAll('img');
6594
6666
  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);
6667
+ if (!imageElm[i].classList.contains('e-rte-image')) {
6668
+ imageElm[i].classList.add('e-rte-image');
6597
6669
  }
6598
- if (!(imageElm[i].classList.contains(CLS_IMGINLINE) ||
6599
- imageElm[i].classList.contains(CLS_IMGBREAK))) {
6600
- imageElm[i].classList.add(CLS_IMGINLINE);
6670
+ if (!(imageElm[i].classList.contains('e-imginline') ||
6671
+ imageElm[i].classList.contains('e-imgbreak'))) {
6672
+ imageElm[i].classList.add('e-imginline');
6601
6673
  }
6602
6674
  }
6603
6675
  }
@@ -7053,7 +7125,7 @@ class Formatter {
7053
7125
  }
7054
7126
  self.trigger(actionComplete, events, (callbackArgs) => {
7055
7127
  self.setPlaceHolder();
7056
- if (callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links' && self.editorMode === 'HTML') {
7128
+ if ((callbackArgs.requestType === 'Images' || callbackArgs.requestType === 'Links') && self.editorMode === 'HTML') {
7057
7129
  const args = callbackArgs;
7058
7130
  if (callbackArgs.requestType === 'Links' && callbackArgs.event &&
7059
7131
  callbackArgs.event.type === 'keydown' &&
@@ -7156,6 +7228,12 @@ const CLEAR_COMMAND = 'clear-commands';
7156
7228
  * @hidden
7157
7229
  */
7158
7230
  const MD_TABLE = 'insert-table';
7231
+ /**
7232
+ * insertText plugin events
7233
+ *
7234
+ * @hidden
7235
+ */
7236
+ const INSERT_TEXT_COMMAND = 'insert-text';
7159
7237
 
7160
7238
  /**
7161
7239
  * Lists internal component
@@ -8884,6 +8962,55 @@ class ClearFormat {
8884
8962
  }
8885
8963
  }
8886
8964
 
8965
+ /**
8966
+ * Link internal component
8967
+ *
8968
+ * @hidden
8969
+ * @deprecated
8970
+ */
8971
+ class MDInsertText {
8972
+ /**
8973
+ * Constructor for creating the insert text plugin
8974
+ *
8975
+ * @param {MarkdownParser} parent - specifies the parent element
8976
+ * @hidden
8977
+ * @deprecated
8978
+ */
8979
+ constructor(parent) {
8980
+ this.parent = parent;
8981
+ this.selection = this.parent.markdownSelection;
8982
+ this.addEventListener();
8983
+ }
8984
+ addEventListener() {
8985
+ this.parent.observer.on(INSERT_TEXT_COMMAND, this.InsertTextExec, this);
8986
+ }
8987
+ InsertTextExec(e) {
8988
+ const textArea = this.parent.element;
8989
+ textArea.focus();
8990
+ const start = textArea.selectionStart;
8991
+ const end = textArea.selectionEnd;
8992
+ const text = e.value.text;
8993
+ const startOffset = start + text.length;
8994
+ const endOffset = end + text.length;
8995
+ textArea.value = textArea.value.substr(0, start)
8996
+ + text + textArea.value.substr(end, textArea.value.length);
8997
+ this.parent.markdownSelection.setSelection(textArea, startOffset, endOffset);
8998
+ this.restore(textArea, startOffset, endOffset, e);
8999
+ }
9000
+ restore(textArea, start, end, event) {
9001
+ this.selection.save(start, end);
9002
+ this.selection.restore(textArea);
9003
+ if (event && event.callBack) {
9004
+ event.callBack({
9005
+ requestType: event.subCommand,
9006
+ selectedText: this.selection.getSelectedText(textArea),
9007
+ editorMode: 'Markdown',
9008
+ event: event.event
9009
+ });
9010
+ }
9011
+ }
9012
+ }
9013
+
8887
9014
  /**
8888
9015
  * MarkdownParser internal component
8889
9016
  *
@@ -8910,6 +9037,7 @@ class MarkdownParser {
8910
9037
  this.linkObj = new MDLink(this);
8911
9038
  this.tableObj = new MDTable({ parent: this, syntaxTag: ({ Formats: this.formatTags, List: this.listTags }) });
8912
9039
  this.clearObj = new ClearFormat(this);
9040
+ this.insertTextObj = new MDInsertText(this);
8913
9041
  this.wireEvents();
8914
9042
  }
8915
9043
  initialize() {
@@ -8976,6 +9104,10 @@ class MarkdownParser {
8976
9104
  case 'clear':
8977
9105
  this.observer.notify(CLEAR_COMMAND, { subCommand: value, event: event, callBack: callBack });
8978
9106
  break;
9107
+ case 'inserttext':
9108
+ this.observer.notify(INSERT_TEXT_COMMAND, { subCommand: value, event: event, callBack: callBack,
9109
+ value: { text: exeValue } });
9110
+ break;
8979
9111
  }
8980
9112
  }
8981
9113
  }
@@ -9051,7 +9183,8 @@ class MarkdownRender {
9051
9183
  const div = this.parent.createElement('div', { id: this.parent.getID() + '_view', className: 'e-rte-content' });
9052
9184
  this.editableElement = this.parent.createElement('textarea', {
9053
9185
  className: 'e-content',
9054
- id: this.parent.getID() + '_editable-content'
9186
+ id: this.parent.getID() + '_editable-content',
9187
+ attrs: { 'aria-labelledby': this.parent.getID() + '_view' }
9055
9188
  });
9056
9189
  div.appendChild(this.editableElement);
9057
9190
  this.setPanel(div);
@@ -10764,6 +10897,8 @@ class Lists {
10764
10897
  let endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
10765
10898
  startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;
10766
10899
  endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
10900
+ startNode = startNode.nodeName !== 'LI' && !isNullOrUndefined(startNode.closest('LI')) ? startNode.closest('LI') : startNode;
10901
+ endNode = endNode.nodeName !== 'LI' && !isNullOrUndefined(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
10767
10902
  if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
10768
10903
  isNullOrUndefined(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
10769
10904
  isNullOrUndefined(startNode.previousElementSibling) && range.startOffset === 0) ||
@@ -11137,7 +11272,7 @@ class Lists {
11137
11272
  }
11138
11273
  }
11139
11274
  applyLists(elements, type, selector, item, e) {
11140
- if (this.isRevert(elements, type) && isNullOrUndefined(item)) {
11275
+ if (this.isRevert(elements, type, item) && isNullOrUndefined(item)) {
11141
11276
  this.revertList(elements, e);
11142
11277
  this.removeEmptyListElements();
11143
11278
  }
@@ -11200,13 +11335,14 @@ class Lists {
11200
11335
  }
11201
11336
  }
11202
11337
  }
11203
- isRevert(nodes, tagName) {
11338
+ isRevert(nodes, tagName, item) {
11204
11339
  let isRevert = true;
11205
11340
  for (let i = 0; i < nodes.length; i++) {
11206
11341
  if (nodes[i].tagName !== 'LI') {
11207
11342
  return false;
11208
11343
  }
11209
- if (nodes[i].parentNode.tagName !== tagName) {
11344
+ if (nodes[i].parentNode.tagName !== tagName ||
11345
+ isNullOrUndefined(item) && nodes[i].parentNode.style.listStyleType !== '') {
11210
11346
  isRevert = false;
11211
11347
  }
11212
11348
  }
@@ -11229,6 +11365,12 @@ class Lists {
11229
11365
  (nodes[i].tagName === 'LI' && node.tagName === tagName && nodesTemp.indexOf(node) < 0 && item !== null)) {
11230
11366
  nodesTemp.push(node);
11231
11367
  }
11368
+ if (isNullOrUndefined(item) && (node.tagName === tagName ||
11369
+ ((node.tagName === 'UL' || node.tagName === 'OL') && node.hasAttribute('style')))) {
11370
+ if (node.hasAttribute('style')) {
11371
+ node.removeAttribute('style');
11372
+ }
11373
+ }
11232
11374
  }
11233
11375
  for (let j = nodesTemp.length - 1; j >= 0; j--) {
11234
11376
  const h = nodesTemp[j];
@@ -11330,7 +11472,8 @@ class Lists {
11330
11472
  }
11331
11473
  }
11332
11474
  }
11333
- if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element), 'LI' === parentNode.parentNode.tagName) {
11475
+ if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element), 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
11476
+ 'UL' === parentNode.parentNode.tagName) {
11334
11477
  element.parentNode.insertBefore(this.closeTag('LI'), element);
11335
11478
  }
11336
11479
  else {
@@ -12288,7 +12431,9 @@ class InsertHtml {
12288
12431
  let isPreviousInlineElem;
12289
12432
  let paraElm;
12290
12433
  let previousParent;
12291
- range.deleteContents();
12434
+ if (!this.contentsDeleted) {
12435
+ range.deleteContents();
12436
+ }
12292
12437
  while (node.firstChild) {
12293
12438
  if (node.firstChild.nodeName === '#text' && node.firstChild.textContent.trim() === '') {
12294
12439
  detach(node.firstChild);
@@ -12416,9 +12561,28 @@ class InsertHtml {
12416
12561
  const nodeSelection = new NodeSelection();
12417
12562
  let currentNode = this.getNodeCollection(range, nodeSelection, node)[this.getNodeCollection(range, nodeSelection, node).length - 1];
12418
12563
  let splitedElm;
12419
- if ((currentNode.nodeName === 'BR' || currentNode.nodeName === 'HR') && !isNullOrUndefined(currentNode.parentElement) &&
12420
- currentNode.parentElement.textContent.trim().length === 0) {
12564
+ if ((currentNode.nodeName === 'BR' || currentNode.nodeName === 'HR' ||
12565
+ (currentNode.nodeName === '#text' && !isNullOrUndefined(currentNode.parentElement) && currentNode.parentElement.nodeName === 'LI')) &&
12566
+ (!isNullOrUndefined(currentNode.parentElement) && currentNode.parentElement.textContent.trim().length === 0)) {
12421
12567
  splitedElm = currentNode;
12568
+ if (currentNode.parentElement.nodeName === 'LI' && !isNullOrUndefined(currentNode.nextSibling) &&
12569
+ currentNode.nextSibling.nodeName === 'BR') {
12570
+ detach(currentNode.nextSibling);
12571
+ }
12572
+ }
12573
+ else if (currentNode.nodeName === '#text' && !isNullOrUndefined(currentNode.parentElement) &&
12574
+ currentNode.parentElement.nodeName === 'LI' && currentNode.parentElement.textContent.trim().length > 0) {
12575
+ splitedElm = currentNode;
12576
+ if (currentNode.parentElement.nodeName === 'LI' && !isNullOrUndefined(currentNode.nextSibling) &&
12577
+ currentNode.nextSibling.nodeName === 'BR') {
12578
+ detach(currentNode.nextSibling);
12579
+ }
12580
+ if (!range.collapsed) {
12581
+ range.deleteContents();
12582
+ }
12583
+ range.insertNode(node);
12584
+ this.contentsDeleted = true;
12585
+ return;
12422
12586
  }
12423
12587
  else {
12424
12588
  splitedElm = nodeCutter.GetSpliceNode(range, blockNode);
@@ -12506,6 +12670,7 @@ InsertHtml.inlineNode = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'bi
12506
12670
  'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',
12507
12671
  'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'sub', 'sup', 'svg',
12508
12672
  'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];
12673
+ InsertHtml.contentsDeleted = false;
12509
12674
 
12510
12675
  /**
12511
12676
  * Link internal component
@@ -15745,7 +15910,7 @@ class MsWordPaste {
15745
15910
  this.checkVShape(elm);
15746
15911
  let imgElem = elm.querySelectorAll('img');
15747
15912
  for (let i = 0; i < imgElem.length; i++) {
15748
- if (!isNullOrUndefined(imgElem[i].getAttribute('v:shapes')) && imgElem[i].getAttribute('v:shapes').indexOf('Picture') < 0) {
15913
+ if (!isNullOrUndefined(imgElem[i].getAttribute('v:shapes')) && imgElem[i].getAttribute('v:shapes').indexOf('Picture') < 0 && imgElem[i].getAttribute('v:shapes').indexOf('Image') < 0) {
15749
15914
  detach(imgElem[i]);
15750
15915
  }
15751
15916
  }
@@ -17118,7 +17283,7 @@ const IFRAMEHEADER = `
17118
17283
  h3+h4, h4+h5, h5+h6{margin-top: 00.6em;}
17119
17284
  ul:last-child{margin-bottom: 0;}
17120
17285
  table { border-collapse: collapse; empty-cells: show;}
17121
- table td,table th {border: 1px solid #BDBDBD; height: 20px; vertical-align: middle;}
17286
+ table td,table th {border: 1px solid #BDBDBD; height: 20px; padding: 2px 5px; vertical-align: middle;}
17122
17287
  table.e-alternate-border tbody tr:nth-child(2n) {background-color: #F5F5F5;}
17123
17288
  table th {background-color: #E0E0E0;}
17124
17289
  table.e-dashed-border td,table.e-dashed-border th { border: 1px dashed #BDBDBD}
@@ -19034,9 +19199,10 @@ class Resize {
19034
19199
  this.parent.on(destroy, this.destroy, this);
19035
19200
  }
19036
19201
  renderResizable() {
19202
+ let enableRtlClass = (this.parent.enableRtl) ? CLS_RTE_RES_WEST : CLS_RTE_RES_EAST;
19037
19203
  this.resizer = this.parent.createElement('div', {
19038
19204
  id: this.parent.getID() + '-resizable', className: 'e-icons'
19039
- + ' ' + CLS_RTE_RES_HANDLE + ' ' + CLS_RTE_RES_EAST
19205
+ + ' ' + CLS_RTE_RES_HANDLE + ' ' + enableRtlClass
19040
19206
  });
19041
19207
  this.parent.element.classList.add(CLS_RTE_RES_CNT);
19042
19208
  this.parent.element.appendChild(this.resizer);
@@ -19067,12 +19233,12 @@ class Resize {
19067
19233
  const boundRect = this.parent.element.getBoundingClientRect();
19068
19234
  if (this.isMouseEvent(e)) {
19069
19235
  this.parent.element.style.height = e.clientY - boundRect.top + 'px';
19070
- this.parent.element.style.width = e.clientX - boundRect.left + 'px';
19236
+ this.parent.element.style.width = (!this.parent.enableRtl) ? e.clientX - boundRect.left + 'px' : boundRect.right - e.clientX + 'px';
19071
19237
  }
19072
19238
  else {
19073
19239
  const eventType = Browser.info.name !== 'msie' ? e.touches[0] : e;
19074
19240
  this.parent.element.style.height = eventType.clientY - boundRect.top + 'px';
19075
- this.parent.element.style.width = eventType.clientX - boundRect.left + 'px';
19241
+ this.parent.element.style.width = (!this.parent.enableRtl) ? e.clientX - boundRect.left + 'px' : boundRect.right - e.clientX + 'px';
19076
19242
  }
19077
19243
  if (!this.parent.toolbarSettings.enable) {
19078
19244
  this.parent.setContentHeight('', false);
@@ -19420,7 +19586,8 @@ class FullScreen {
19420
19586
  }
19421
19587
  this.parent.element.classList.add(CLS_FULL_SCREEN);
19422
19588
  this.toggleParentOverflow(true);
19423
- this.parent.setContentHeight();
19589
+ let isExpand = this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
19590
+ this.parent.setContentHeight(null, isExpand);
19424
19591
  if (this.parent.toolbarModule) {
19425
19592
  if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {
19426
19593
  this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);
@@ -19466,7 +19633,8 @@ class FullScreen {
19466
19633
  for (let i = 0; i < elem.length; i++) {
19467
19634
  removeClass([elem[i]], ['e-rte-overflow']);
19468
19635
  }
19469
- this.parent.setContentHeight();
19636
+ let isExpand = this.parent.element.querySelectorAll('.e-toolbar-extended.e-popup-open').length > 0 ? true : false;
19637
+ this.parent.setContentHeight(null, isExpand);
19470
19638
  if (this.parent.toolbarModule) {
19471
19639
  if (!this.parent.getBaseToolbarObject().toolbarObj.items[0].properties) {
19472
19640
  this.parent.getBaseToolbarObject().toolbarObj.removeItems(0);
@@ -19938,22 +20106,22 @@ class Link {
19938
20106
  const textPlace = this.i10n.getConstant('textPlaceholder');
19939
20107
  const title = this.i10n.getConstant('linkTitle');
19940
20108
  const linkDialogEle = this.parent.createElement('div', {
19941
- className: 'e-rte-link-dialog', id: this.rteID + '_rtelink'
20109
+ className: 'e-rte-link-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_rtelink'
19942
20110
  });
19943
20111
  this.parent.element.appendChild(linkDialogEle);
19944
20112
  const linkContent = this.parent.createElement('div', {
19945
- className: 'e-rte-linkcontent', id: this.rteID + '_linkContent'
20113
+ className: 'e-rte-linkcontent' + ' ' + this.parent.cssClass, id: this.rteID + '_linkContent'
19946
20114
  });
19947
20115
  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;
20116
+ '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
20117
+ '<input type="text" data-role ="none" spellcheck="false" placeholder = "' + title + '" class="e-input e-rte-linkTitle' + ' ' + this.parent.cssClass + '"></div>' +
20118
+ '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
20119
+ '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>' : '';
20120
+ const content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + linkWebAddress + '</label></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
20121
+ '<input type="text" data-role ="none" spellcheck="false" placeholder="' + urlPlace + '" class="e-input e-rte-linkurl' + ' ' + this.parent.cssClass + '"/></div>' +
20122
+ '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + linkDisplayText + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
20123
+ '<input type="text" data-role ="none" spellcheck="false" class="e-input e-rte-linkText' + ' ' + this.parent.cssClass + '" placeholder="' + textPlace + '">' +
20124
+ '</div><div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + htmlTextbox;
19957
20125
  const contentElem = parseHtml(content);
19958
20126
  linkContent.appendChild(contentElem);
19959
20127
  const linkTarget = linkContent.querySelector('.e-rte-linkTarget');
@@ -19981,9 +20149,9 @@ class Link {
19981
20149
  isModal: Browser.isDevice,
19982
20150
  buttons: [{
19983
20151
  click: this.insertlink.bind(selectObj),
19984
- buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink', isPrimary: true }
20152
+ buttonModel: { content: linkInsert, cssClass: 'e-flat e-insertLink' + ' ' + this.parent.cssClass, isPrimary: true }
19985
20153
  },
19986
- { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat', content: linkCancel } }],
20154
+ { click: this.cancelDialog.bind(selectObj), buttonModel: { cssClass: 'e-flat' + ' ' + this.parent.cssClass, content: linkCancel } }],
19987
20155
  target: (Browser.isDevice) ? document.body : this.parent.element,
19988
20156
  animationSettings: { effect: 'None' },
19989
20157
  close: (event) => {
@@ -20127,8 +20295,10 @@ class Link {
20127
20295
  if (this.parent.formatter.getUndoRedoStack().length === 0) {
20128
20296
  this.parent.formatter.saveData();
20129
20297
  }
20298
+ const selectParentEle = this.getAnchorNode(e.selectParent[0]);
20130
20299
  this.parent.formatter.process(this.parent, e.args, e.args, {
20131
20300
  selectNode: e.selectNode, selectParent: e.selectParent, selection: e.selection,
20301
+ text: selectParentEle.innerText,
20132
20302
  subCommand: e.args.item.subCommand
20133
20303
  });
20134
20304
  if (isIDevice$1() && this.parent.iframeSettings.enable) {
@@ -20143,7 +20313,7 @@ class Link {
20143
20313
  const selectParentEle = this.getAnchorNode(e.selectParent[0]);
20144
20314
  if (selectParentEle.classList.contains('e-rte-anchor') || selectParentEle.tagName === 'A') {
20145
20315
  this.parent.formatter.process(this.parent, e.args, e.args, {
20146
- url: selectParentEle.href,
20316
+ url: selectParentEle.href, text: selectParentEle.innerText,
20147
20317
  target: selectParentEle.target === '' ? '_self' : '_blank', selectNode: e.selectNode,
20148
20318
  subCommand: e.args.item.subCommand
20149
20319
  });
@@ -20461,18 +20631,18 @@ class Image {
20461
20631
  this.resizeBtnInit();
20462
20632
  this.imgEle = e;
20463
20633
  addClass([this.imgEle], 'e-resize');
20464
- this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize', id: this.rteID + '_imgResize' });
20634
+ this.imgResizeDiv = this.parent.createElement('span', { className: 'e-img-resize' + ' ' + this.parent.cssClass, id: this.rteID + '_imgResize' });
20465
20635
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20466
- className: 'e-rte-imageboxmark e-rte-topLeft', styles: 'cursor: nwse-resize'
20636
+ className: 'e-rte-imageboxmark e-rte-topLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
20467
20637
  }));
20468
20638
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20469
- className: 'e-rte-imageboxmark e-rte-topRight', styles: 'cursor: nesw-resize'
20639
+ className: 'e-rte-imageboxmark e-rte-topRight' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
20470
20640
  }));
20471
20641
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20472
- className: 'e-rte-imageboxmark e-rte-botLeft', styles: 'cursor: nesw-resize'
20642
+ className: 'e-rte-imageboxmark e-rte-botLeft' + ' ' + this.parent.cssClass, styles: 'cursor: nesw-resize'
20473
20643
  }));
20474
20644
  this.imgResizeDiv.appendChild(this.parent.createElement('span', {
20475
- className: 'e-rte-imageboxmark e-rte-botRight', styles: 'cursor: nwse-resize'
20645
+ className: 'e-rte-imageboxmark e-rte-botRight' + ' ' + this.parent.cssClass, styles: 'cursor: nwse-resize'
20476
20646
  }));
20477
20647
  if (Browser.isDevice) {
20478
20648
  addClass([this.imgResizeDiv], 'e-mob-rte');
@@ -21134,12 +21304,12 @@ class Image {
21134
21304
  }
21135
21305
  this.imagDialog(e);
21136
21306
  if (!isNullOrUndefined(this.dialogObj)) {
21137
- const linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' });
21307
+ const linkWrap = this.parent.createElement('div', { className: 'e-img-linkwrap' + ' ' + this.parent.cssClass });
21138
21308
  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>' +
21309
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
21310
+ '<input type="text" data-role ="none" class="e-input e-img-link' + ' ' + this.parent.cssClass + '" spellcheck="false" placeholder="' + linkUrl + '"/></div>' +
21141
21311
  '<div class="e-rte-label"></div>' + '<div class="e-rte-field">' +
21142
- '<input type="checkbox" class="e-rte-linkTarget" data-role ="none"></div>';
21312
+ '<input type="checkbox" class="e-rte-linkTarget' + ' ' + this.parent.cssClass + '" data-role ="none"></div>';
21143
21313
  const contentElem = parseHtml(content);
21144
21314
  linkWrap.appendChild(contentElem);
21145
21315
  const linkTarget = linkWrap.querySelector('.e-rte-linkTarget');
@@ -21178,9 +21348,10 @@ class Image {
21178
21348
  this.insertlink(linkargs);
21179
21349
  },
21180
21350
  buttonModel: {
21181
- content: linkUpdate, cssClass: 'e-flat e-update-link', isPrimary: true
21351
+ content: linkUpdate, cssClass: 'e-flat e-update-link' + ' ' + this.parent.cssClass, isPrimary: true
21182
21352
  }
21183
- }]
21353
+ }],
21354
+ cssClass: this.dialogObj.cssClass + ' e-rte-img-link-dialog'
21184
21355
  });
21185
21356
  if (!isNullOrUndefined(this.parent.cssClass)) {
21186
21357
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
@@ -21202,13 +21373,13 @@ class Image {
21202
21373
  this.imagDialog(e);
21203
21374
  const altText = this.i10n.getConstant('altText');
21204
21375
  if (!isNullOrUndefined(this.dialogObj)) {
21205
- const altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' });
21376
+ const altWrap = this.parent.createElement('div', { className: 'e-img-altwrap' + ' ' + this.parent.cssClass });
21206
21377
  const altHeader = this.i10n.getConstant('alternateHeader');
21207
21378
  const linkUpdate = this.i10n.getConstant('dialogUpdate');
21208
21379
  const getAlt = (e.selectNode[0].getAttribute('alt') === null) ? '' :
21209
21380
  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 + '"/>' +
21381
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '">' +
21382
+ '<input type="text" spellcheck="false" value="' + getAlt + '" class="e-input e-img-alt' + ' ' + this.parent.cssClass + '" placeholder="' + altText + '"/>' +
21212
21383
  '</div>';
21213
21384
  const contentElem = parseHtml(content);
21214
21385
  altWrap.appendChild(contentElem);
@@ -21225,9 +21396,10 @@ class Image {
21225
21396
  this.insertAlt(altArgs);
21226
21397
  },
21227
21398
  buttonModel: {
21228
- content: linkUpdate, cssClass: 'e-flat e-update-alt', isPrimary: true
21399
+ content: linkUpdate, cssClass: 'e-flat e-update-alt' + ' ' + this.parent.cssClass, isPrimary: true
21229
21400
  }
21230
- }]
21401
+ }],
21402
+ cssClass: this.dialogObj.cssClass + ' e-rte-img-alt-dialog'
21231
21403
  });
21232
21404
  if (!isNullOrUndefined(this.parent.cssClass)) {
21233
21405
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
@@ -21391,11 +21563,11 @@ class Image {
21391
21563
  }
21392
21564
  else {
21393
21565
  this.captionEle = this.parent.createElement('span', {
21394
- className: CLS_CAPTION + ' ' + CLS_RTE_CAPTION,
21566
+ className: CLS_CAPTION + ' ' + CLS_RTE_CAPTION + ' ' + this.parent.cssClass,
21395
21567
  attrs: { contenteditable: 'false', draggable: 'false', style: 'width:' + this.parent.insertImageSettings.width }
21396
21568
  });
21397
- const imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' });
21398
- const imgInner = this.parent.createElement('span', { className: 'e-img-inner',
21569
+ const imgWrap = this.parent.createElement('span', { className: 'e-img-wrap' + ' ' + this.parent.cssClass });
21570
+ const imgInner = this.parent.createElement('span', { className: 'e-img-inner' + ' ' + this.parent.cssClass,
21399
21571
  attrs: { contenteditable: 'true' } });
21400
21572
  const parent = e.selectNode[0].parentElement;
21401
21573
  if (parent.tagName === 'A') {
@@ -21447,9 +21619,10 @@ class Image {
21447
21619
  this.insertSize(selectObj);
21448
21620
  },
21449
21621
  buttonModel: {
21450
- content: linkUpdate, cssClass: 'e-flat e-update-size', isPrimary: true
21622
+ content: linkUpdate, cssClass: 'e-flat e-update-size' + ' ' + this.parent.cssClass, isPrimary: true
21451
21623
  }
21452
- }]
21624
+ }],
21625
+ cssClass: this.dialogObj.cssClass + ' e-rte-img-size-dialog'
21453
21626
  });
21454
21627
  if (!isNullOrUndefined(this.parent.cssClass)) {
21455
21628
  this.dialogObj.setProperties({ cssClass: this.parent.cssClass });
@@ -21491,7 +21664,7 @@ class Image {
21491
21664
  this.dialogObj.hide({ returnValue: true });
21492
21665
  return;
21493
21666
  }
21494
- const imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog', id: this.rteID + '_image' });
21667
+ const imgDialog = this.parent.createElement('div', { className: 'e-rte-img-dialog' + ' ' + this.parent.cssClass, id: this.rteID + '_image' });
21495
21668
  this.parent.element.appendChild(imgDialog);
21496
21669
  const imgInsert = this.i10n.getConstant('dialogInsert');
21497
21670
  const imglinkCancel = this.i10n.getConstant('dialogCancel');
@@ -21500,7 +21673,7 @@ class Image {
21500
21673
  const selectObj = { selfImage: this, selection: e.selection, args: e.args, selectParent: e.selectParent };
21501
21674
  const dialogModel = {
21502
21675
  header: imgHeader,
21503
- cssClass: CLS_RTE_ELEMENTS,
21676
+ cssClass: CLS_RTE_ELEMENTS + ' ' + this.parent.cssClass,
21504
21677
  enableRtl: this.parent.enableRtl,
21505
21678
  locale: this.parent.locale,
21506
21679
  showCloseIcon: true, closeOnEscape: true, width: (Browser.isDevice) ? '290px' : '340px', height: 'inherit',
@@ -21508,13 +21681,13 @@ class Image {
21508
21681
  isModal: Browser.isDevice,
21509
21682
  buttons: [{
21510
21683
  click: this.insertImageUrl.bind(selectObj),
21511
- buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage', isPrimary: true, disabled: true }
21684
+ buttonModel: { content: imgInsert, cssClass: 'e-flat e-insertImage' + ' ' + this.parent.cssClass, isPrimary: true, disabled: true }
21512
21685
  },
21513
21686
  {
21514
21687
  click: (e) => {
21515
21688
  this.cancelDialog(e);
21516
21689
  },
21517
- buttonModel: { cssClass: 'e-flat e-cancel', content: imglinkCancel }
21690
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: imglinkCancel }
21518
21691
  }],
21519
21692
  target: (Browser.isDevice) ? document.body : this.parent.element,
21520
21693
  animationSettings: { effect: 'None' },
@@ -21537,12 +21710,12 @@ class Image {
21537
21710
  this.dialogObj = null;
21538
21711
  }
21539
21712
  };
21540
- const dialogContent = this.parent.createElement('div', { className: 'e-img-content' });
21713
+ const dialogContent = this.parent.createElement('div', { className: 'e-img-content' + ' ' + this.parent.cssClass });
21541
21714
  if ((!isNullOrUndefined(this.parent.insertImageSettings.path) && this.parent.editorMode === 'Markdown')
21542
21715
  || this.parent.editorMode === 'HTML') {
21543
21716
  dialogContent.appendChild(this.imgUpload(e));
21544
21717
  }
21545
- const linkHeader = this.parent.createElement('div', { className: 'e-linkheader' });
21718
+ const linkHeader = this.parent.createElement('div', { className: 'e-linkheader' + ' ' + this.parent.cssClass });
21546
21719
  const linkHeaderText = this.i10n.getConstant('imageLinkHeader');
21547
21720
  if (this.parent.editorMode === 'HTML') {
21548
21721
  linkHeader.innerHTML = linkHeaderText;
@@ -21614,7 +21787,8 @@ class Image {
21614
21787
  }
21615
21788
  /* eslint-enable */
21616
21789
  }
21617
- if (!(this.parent.iframeSettings.enable && this.parent.currentTarget.nodeName === 'IMG') && e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&
21790
+ if (!(this.parent.iframeSettings.enable && !isNullOrUndefined(this.parent.currentTarget) && this.parent.currentTarget.nodeName === 'IMG') &&
21791
+ e.target.tagName !== 'IMG' && this.imgResizeDiv && !(this.quickToolObj &&
21618
21792
  this.quickToolObj.imageQTBar && this.quickToolObj.imageQTBar.element.contains(e.target)) &&
21619
21793
  this.contentModule.getEditPanel().contains(this.imgResizeDiv)) {
21620
21794
  this.cancelResizeAction();
@@ -21643,10 +21817,10 @@ class Image {
21643
21817
  }
21644
21818
  // eslint-disable-next-line
21645
21819
  imageUrlPopup(e) {
21646
- const imgUrl = this.parent.createElement('div', { className: 'imgUrl' });
21820
+ const imgUrl = this.parent.createElement('div', { className: 'imgUrl' + ' ' + this.parent.cssClass });
21647
21821
  const placeUrl = this.i10n.getConstant('imageUrl');
21648
21822
  this.inputUrl = this.parent.createElement('input', {
21649
- className: 'e-input e-img-url',
21823
+ className: 'e-input e-img-url' + ' ' + this.parent.cssClass,
21650
21824
  attrs: { placeholder: placeUrl, spellcheck: 'false' }
21651
21825
  });
21652
21826
  this.inputUrl.addEventListener('input', () => {
@@ -21712,7 +21886,7 @@ class Image {
21712
21886
  const selectNode = e.selectNode[0];
21713
21887
  const imgHeight = this.i10n.getConstant('imageHeight');
21714
21888
  const imgWidth = this.i10n.getConstant('imageWidth');
21715
- const imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' });
21889
+ const imgSizeWrap = this.parent.createElement('div', { className: 'e-img-sizewrap' + ' ' + this.parent.cssClass });
21716
21890
  const widthVal = isNullOrUndefined(this.changedWidthValue) && (selectNode.style.width.toString() === 'auto' ||
21717
21891
  selectNode.style.width !== '') ? selectNode.style.width : !isNullOrUndefined(this.changedWidthValue) ?
21718
21892
  this.changedWidthValue : (parseInt(selectNode.getClientRects()[0].width.toString(), 10)).toString();
@@ -21721,12 +21895,12 @@ class Image {
21721
21895
  this.changedHeightValue : (parseInt(selectNode.getClientRects()[0].height.toString(), 10)).toString();
21722
21896
  this.changedWidthValue = null;
21723
21897
  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=' +
21898
+ const content = '<div class="e-rte-label' + ' ' + this.parent.cssClass + '"><label>' + imgWidth +
21899
+ '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" id="imgwidth" class="e-img-width' + ' ' + this.parent.cssClass + '" value=' +
21726
21900
  widthVal
21727
21901
  + ' /></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=' +
21902
+ '<div class="e-rte-label' + ' ' + this.parent.cssClass + '">' + '<label>' + imgHeight + '</label></div><div class="e-rte-field' + ' ' + this.parent.cssClass + '"> ' +
21903
+ '<input type="text" id="imgheight" class="e-img-height' + ' ' + this.parent.cssClass + '" value=' +
21730
21904
  heightVal
21731
21905
  + ' /></div>';
21732
21906
  const contentElem = parseHtml(content);
@@ -21815,16 +21989,16 @@ class Image {
21815
21989
  save = e.selection;
21816
21990
  selectParent = e.selectParent;
21817
21991
  }
21818
- const uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' });
21992
+ const uploadParentEle = this.parent.createElement('div', { className: 'e-img-uploadwrap e-droparea' + ' ' + this.parent.cssClass });
21819
21993
  const deviceImgUpMsg = this.i10n.getConstant('imageDeviceUploadMessage');
21820
21994
  const imgUpMsg = this.i10n.getConstant('imageUploadMessage');
21821
- const span = this.parent.createElement('span', { className: 'e-droptext' });
21995
+ const span = this.parent.createElement('span', { className: 'e-droptext' + ' ' + this.parent.cssClass });
21822
21996
  const spanMsg = this.parent.createElement('span', {
21823
- className: 'e-rte-upload-text', innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
21997
+ className: 'e-rte-upload-text' + ' ' + this.parent.cssClass, innerHTML: ((Browser.isDevice) ? deviceImgUpMsg : imgUpMsg)
21824
21998
  });
21825
21999
  span.appendChild(spanMsg);
21826
22000
  const btnEle = this.parent.createElement('button', {
21827
- className: 'e-browsebtn', id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
22001
+ className: 'e-browsebtn' + ' ' + this.parent.cssClass, id: this.rteID + '_insertImage', attrs: { autofocus: 'true', type: 'button' }
21828
22002
  });
21829
22003
  span.appendChild(btnEle);
21830
22004
  uploadParentEle.appendChild(span);
@@ -21836,7 +22010,7 @@ class Image {
21836
22010
  const btnClick = (Browser.isDevice) ? span : btnEle;
21837
22011
  EventHandler.add(btnClick, 'click', this.fileSelect, this);
21838
22012
  const uploadEle = this.parent.createElement('input', {
21839
- id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }
22013
+ id: this.rteID + '_upload', attrs: { type: 'File', name: 'UploadFiles' }, className: this.parent.cssClass
21840
22014
  });
21841
22015
  uploadParentEle.appendChild(uploadEle);
21842
22016
  let altText;
@@ -22518,7 +22692,7 @@ class ViewSource {
22518
22692
  this.parent.formatter.editorManager.observer.off(KEY_DOWN_HANDLER, this.onKeyDown);
22519
22693
  }
22520
22694
  getSourceCode() {
22521
- return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' });
22695
+ return this.parent.createElement('textarea', { className: 'e-rte-srctextarea' + ' ' + this.parent.cssClass });
22522
22696
  }
22523
22697
  wireEvent(element) {
22524
22698
  this.keyboardModule = new KeyboardEvents$1(element, {
@@ -22749,6 +22923,8 @@ class Table {
22749
22923
  this.pageX = null;
22750
22924
  this.pageY = null;
22751
22925
  this.moveEle = null;
22926
+ this.currentColumnResize = '';
22927
+ this.currentMarginLeft = 0;
22752
22928
  this.parent = parent;
22753
22929
  this.rteID = parent.element.id;
22754
22930
  this.l10n = serviceLocator.getService('rteLocale');
@@ -22916,6 +23092,7 @@ class Table {
22916
23092
  }
22917
23093
  else if (ele && ele.querySelectorAll('table').length > 0) {
22918
23094
  this.removeResizeElement();
23095
+ this.hideTableQuickToolbar();
22919
23096
  }
22920
23097
  }
22921
23098
  if (ele && ele.tagName !== 'TD' && ele.tagName !== 'TH') {
@@ -23292,7 +23469,7 @@ class Table {
23292
23469
  }
23293
23470
  tableResizeEleCreation(table, e) {
23294
23471
  this.parent.preventDefaultResize(e);
23295
- const columns = Array.prototype.slice.call(table.rows[this.calMaxCol(table)].cells, 1);
23472
+ const columns = table.rows[this.calMaxCol(table)].cells;
23296
23473
  const rows = [];
23297
23474
  for (let i = 0; i < table.rows.length; i++) {
23298
23475
  rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);
@@ -23300,15 +23477,21 @@ class Table {
23300
23477
  const height = parseInt(getComputedStyle(table).height, 10);
23301
23478
  const width = parseInt(getComputedStyle(table).width, 10);
23302
23479
  const pos = this.calcPos(table);
23303
- for (let i = 0; columns.length > i; i++) {
23480
+ for (let i = 0; columns.length >= i; i++) {
23304
23481
  const colReEle = this.parent.createElement('span', {
23305
23482
  attrs: {
23306
- 'data-col': (i + 1).toString(), 'unselectable': 'on', 'contenteditable': 'false'
23483
+ 'data-col': (i).toString(), 'unselectable': 'on', 'contenteditable': 'false'
23307
23484
  }
23308
23485
  });
23309
23486
  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;';
23487
+ if (columns.length === i) {
23488
+ colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +
23489
+ 'px; left:' + (pos.left + this.calcPos(columns[i - 1]).left + columns[i - 1].offsetWidth) + 'px;';
23490
+ }
23491
+ else {
23492
+ colReEle.style.cssText = 'height: ' + height + 'px; width: 4px; top: ' + pos.top +
23493
+ 'px; left:' + (pos.left + this.calcPos(columns[i]).left) + 'px;';
23494
+ }
23312
23495
  this.contentModule.getEditPanel().appendChild(colReEle);
23313
23496
  }
23314
23497
  for (let i = 0; rows.length > i; i++) {
@@ -23326,7 +23509,7 @@ class Table {
23326
23509
  this.contentModule.getEditPanel().appendChild(rowReEle);
23327
23510
  }
23328
23511
  const tableReBox = this.parent.createElement('span', {
23329
- className: CLS_TB_BOX_RES, attrs: {
23512
+ className: CLS_TB_BOX_RES + ' ' + this.parent.cssClass, attrs: {
23330
23513
  'data-col': columns.length.toString(), 'unselectable': 'on', 'contenteditable': 'false'
23331
23514
  }
23332
23515
  });
@@ -23424,7 +23607,19 @@ class Table {
23424
23607
  this.hideTableQuickToolbar();
23425
23608
  if (target.classList.contains(CLS_TB_COL_RES)) {
23426
23609
  this.resizeBtnStat.column = true;
23427
- this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10)];
23610
+ if (parseInt(target.getAttribute('data-col'), 10) === this.curTable.rows[this.calMaxCol(this.curTable)].cells.length) {
23611
+ this.currentColumnResize = 'last';
23612
+ this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10) - 1];
23613
+ }
23614
+ else {
23615
+ if (parseInt(target.getAttribute('data-col'), 10) === 0) {
23616
+ this.currentColumnResize = 'first';
23617
+ }
23618
+ else {
23619
+ this.currentColumnResize = 'middle';
23620
+ }
23621
+ this.columnEle = this.curTable.rows[this.calMaxCol(this.curTable)].cells[parseInt(target.getAttribute('data-col'), 10)];
23622
+ }
23428
23623
  this.colIndex = this.columnEle.cellIndex;
23429
23624
  this.moveEle = e.target;
23430
23625
  this.appendHelper();
@@ -23468,7 +23663,7 @@ class Table {
23468
23663
  }
23469
23664
  appendHelper() {
23470
23665
  this.helper = this.parent.createElement('div', {
23471
- className: 'e-table-rhelper'
23666
+ className: 'e-table-rhelper' + ' ' + this.parent.cssClass
23472
23667
  });
23473
23668
  if (Browser.isDevice) {
23474
23669
  this.helper.classList.add('e-reicon');
@@ -23481,7 +23676,8 @@ class Table {
23481
23676
  if (this.resizeBtnStat.column) {
23482
23677
  this.helper.classList.add('e-column-helper');
23483
23678
  this.helper.style.cssText = 'height: ' + getComputedStyle(this.curTable).height + '; top: ' +
23484
- pos.top + 'px; left:' + (pos.left + this.calcPos(this.columnEle).left - 1) + 'px;';
23679
+ pos.top + 'px; left:' + ((pos.left + this.calcPos(this.columnEle).left) +
23680
+ (this.currentColumnResize === 'last' ? this.columnEle.offsetWidth + 2 : 0) - 1) + 'px;';
23485
23681
  }
23486
23682
  else {
23487
23683
  this.helper.classList.add('e-row-helper');
@@ -23493,7 +23689,8 @@ class Table {
23493
23689
  updateHelper() {
23494
23690
  const pos = this.calcPos(this.curTable);
23495
23691
  if (this.resizeBtnStat.column) {
23496
- const left = pos.left + this.calcPos(this.columnEle).left - 1;
23692
+ const left = (pos.left + this.calcPos(this.columnEle).left) +
23693
+ (this.currentColumnResize === 'last' ? this.columnEle.offsetWidth + 2 : 0) - 1;
23497
23694
  this.helper.style.left = left + 'px';
23498
23695
  }
23499
23696
  else {
@@ -23515,7 +23712,7 @@ class Table {
23515
23712
  resizing(e) {
23516
23713
  const pageX = this.getPointX(e);
23517
23714
  const pageY = this.getPointY(e);
23518
- const mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);
23715
+ let mouseX = (this.parent.enableRtl) ? -(pageX - this.pageX) : (pageX - this.pageX);
23519
23716
  const mouseY = (this.parent.enableRtl) ? -(pageY - this.pageY) : (pageY - this.pageY);
23520
23717
  this.pageX = pageX;
23521
23718
  this.pageY = pageY;
@@ -23531,23 +23728,66 @@ class Table {
23531
23728
  const paddingSize = +getComputedStyle(this.contentModule.getEditPanel()).paddingRight.match(/\d/g).join('');
23532
23729
  const rteWidth = this.contentModule.getEditPanel().offsetWidth - (this.contentModule.getEditPanel().offsetWidth -
23533
23730
  this.contentModule.getEditPanel().clientWidth) - paddingSize * 2;
23731
+ let widthCompare;
23732
+ if (!isNullOrUndefined(this.curTable.parentElement.closest('table'))) {
23733
+ const currentTd = this.curTable.closest('td');
23734
+ const currentTDPad = +getComputedStyle(currentTd).paddingRight.match(/\d/g).join('');
23735
+ // Padding of the current table with the parent element multiply with 2.
23736
+ widthCompare = currentTd.offsetWidth - (currentTd.offsetWidth - currentTd.clientWidth) - currentTDPad * 2;
23737
+ }
23738
+ else {
23739
+ widthCompare = rteWidth;
23740
+ }
23534
23741
  if (this.resizeBtnStat.column) {
23535
- const cellColl = this.curTable.rows[this.calMaxCol(this.curTable)].cells;
23536
23742
  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) + '%';
23743
+ let cellRow = this.curTable.rows[0].cells[0].nodeName === 'TH' ? 1 : 0;
23744
+ let currentTableWidth = parseFloat(this.curTable.style.width.split('%')[0]);
23745
+ let currentColumnCellWidth = parseFloat(this.curTable.rows[cellRow].cells[this.colIndex].style.width.split('%')[0]);
23746
+ if (this.currentColumnResize === 'first') {
23747
+ mouseX = mouseX - 0.75; //This was done for to make the gripper and the table first/last column will be close.
23748
+ this.removeResizeElement();
23749
+ // Below the value '100' is the 100% width of the parent element.
23750
+ if (((mouseX !== 0 && 5 < currentColumnCellWidth) || mouseX < 0) && currentTableWidth <= 100 && this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) <= 100) {
23751
+ const firstColumnsCell = this.findFirstLastColCells(this.curTable, true);
23752
+ this.curTable.style.width = this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) > 100 ? (100 + '%') : (this.convertPixelToPercentage(tableWidth - mouseX, widthCompare) + '%');
23753
+ let differenceWidth = currentTableWidth - this.convertPixelToPercentage(tableWidth - mouseX, widthCompare);
23754
+ this.currentMarginLeft = this.currentMarginLeft + differenceWidth;
23755
+ this.curTable.style.marginLeft = 'calc(' + (this.curTable.style.width === '100%' ? 0 : this.currentMarginLeft) + '%)';
23756
+ for (let i = 0; i < firstColumnsCell.length; i++) {
23757
+ this.curTable.rows[i].cells[this.colIndex].style.width = (currentColumnCellWidth - differenceWidth) + '%';
23547
23758
  }
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) + '%';
23759
+ }
23760
+ }
23761
+ else if (this.currentColumnResize === 'last') {
23762
+ mouseX = mouseX + 0.75; //This was done for to make the gripper and the table first/last column will be close.
23763
+ this.removeResizeElement();
23764
+ // Below the value '100' is the 100% width of the parent element.
23765
+ if (((mouseX !== 0 && 5 < currentColumnCellWidth) || mouseX > 0) && currentTableWidth <= 100 && this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) <= 100) {
23766
+ const lastColumnsCell = this.findFirstLastColCells(this.curTable, false);
23767
+ this.curTable.style.width = this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) > 100 ? (100 + '%') : (this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) + '%');
23768
+ let differenceWidth = currentTableWidth - this.convertPixelToPercentage(tableWidth + mouseX, widthCompare);
23769
+ for (let i = 0; i < lastColumnsCell.length; i++) {
23770
+ this.curTable.rows[i].cells[this.colIndex].style.width = (currentColumnCellWidth - differenceWidth) + '%';
23771
+ }
23772
+ }
23773
+ }
23774
+ else {
23775
+ const cellColl = this.curTable.rows[this.calMaxCol(this.curTable)].cells;
23776
+ const actualwid = width - mouseX;
23777
+ const totalwid = parseFloat(this.columnEle.offsetWidth.toString()) +
23778
+ parseFloat(cellColl[this.colIndex - 1].offsetWidth.toString());
23779
+ for (let i = 0; i < this.curTable.rows.length; i++) {
23780
+ if ((totalwid - actualwid) > 20 && actualwid > 20) {
23781
+ const leftColumnWidth = totalwid - actualwid;
23782
+ const rightColWidth = actualwid;
23783
+ if (!isNullOrUndefined(this.curTable.rows[i].cells[this.colIndex - 1])) {
23784
+ this.curTable.rows[i].cells[this.colIndex - 1].style.width =
23785
+ this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';
23786
+ }
23787
+ if (!isNullOrUndefined(this.curTable.rows[i].cells[this.colIndex])) {
23788
+ this.curTable.rows[i].cells[this.colIndex].style.width =
23789
+ this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';
23790
+ }
23551
23791
  }
23552
23792
  }
23553
23793
  }
@@ -23571,7 +23811,7 @@ class Table {
23571
23811
  EventHandler.remove(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper);
23572
23812
  }
23573
23813
  const widthType = this.curTable.style.width.indexOf('%') > -1;
23574
- this.curTable.style.width = widthType ? this.convertPixelToPercentage(tableWidth + mouseX, rteWidth) + '%'
23814
+ this.curTable.style.width = widthType ? this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) + '%'
23575
23815
  : tableWidth + mouseX + 'px';
23576
23816
  this.curTable.style.height = tableHeight + mouseY + 'px';
23577
23817
  tableReBox.classList.add('e-rbox-select');
@@ -23581,6 +23821,17 @@ class Table {
23581
23821
  }
23582
23822
  });
23583
23823
  }
23824
+ findFirstLastColCells(table, isFirst) {
23825
+ let resultColumns = [];
23826
+ const rows = table.querySelectorAll('tr');
23827
+ for (let i = 0; i < rows.length; i++) {
23828
+ if (rows[i].closest('table') === table) {
23829
+ const columns = rows[i].querySelectorAll('th, td');
23830
+ resultColumns.push(isFirst ? columns[0] : columns[columns.length - 1]);
23831
+ }
23832
+ }
23833
+ return resultColumns;
23834
+ }
23584
23835
  convertPixelToPercentage(value, offsetValue) {
23585
23836
  return (value / offsetValue) * 100;
23586
23837
  }
@@ -23599,14 +23850,14 @@ class Table {
23599
23850
  EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);
23600
23851
  }
23601
23852
  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
23853
  }
23854
+ if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {
23855
+ detach(this.helper);
23856
+ this.helper = null;
23857
+ }
23858
+ this.pageX = null;
23859
+ this.pageY = null;
23860
+ this.moveEle = null;
23610
23861
  const args = { event: e, requestType: 'table' };
23611
23862
  this.parent.trigger(resizeStop, args);
23612
23863
  this.parent.formatter.saveData();
@@ -23660,16 +23911,16 @@ class Table {
23660
23911
  this.hideTableQuickToolbar();
23661
23912
  const header = '1X1';
23662
23913
  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' });
23914
+ this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup' + ' ' + this.parent.cssClass, id: this.rteID + '_table' });
23915
+ this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' + ' ' + this.parent.cssClass });
23665
23916
  this.tblHeader.innerHTML = header;
23666
23917
  this.dlgDiv.appendChild(this.tblHeader);
23667
- const tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' });
23918
+ const tableDiv = this.parent.createElement('div', { className: 'e-rte-table-span' + ' ' + this.parent.cssClass });
23668
23919
  this.drawTable(tableDiv, args);
23669
23920
  this.dlgDiv.appendChild(tableDiv);
23670
- this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' }));
23921
+ this.dlgDiv.appendChild(this.parent.createElement('span', { className: 'e-span-border' + ' ' + this.parent.cssClass }));
23671
23922
  const btnEle = this.parent.createElement('button', {
23672
- className: 'e-insert-table-btn', id: this.rteID + '_insertTable',
23923
+ className: 'e-insert-table-btn' + ' ' + this.parent.cssClass, id: this.rteID + '_insertTable',
23673
23924
  attrs: { type: 'button', tabindex: '0' }
23674
23925
  });
23675
23926
  if (!isNullOrUndefined(this.parent.getToolbarElement().querySelector('.e-expended-nav'))) {
@@ -23731,7 +23982,7 @@ class Table {
23731
23982
  !target.offsetParent.classList.contains('e-quick-dropdown') &&
23732
23983
  !target.offsetParent.classList.contains('e-rte-backgroundcolor-dropdown') && !closest(target, '.e-rte-dropdown-popup')
23733
23984
  && !closest(target, '.e-rte-elements')) {
23734
- removeClass(this.parent.element.querySelectorAll('table td'), CLS_TABLE_SEL);
23985
+ removeClass(this.parent.inputElement.querySelectorAll('table td'), CLS_TABLE_SEL);
23735
23986
  if (!Browser.isIE) {
23736
23987
  this.hideTableQuickToolbar();
23737
23988
  }
@@ -23745,10 +23996,10 @@ class Table {
23745
23996
  let rowDiv;
23746
23997
  let tableCell;
23747
23998
  for (let row = 0; row < 3; row++) {
23748
- rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row', attrs: { 'data-column': '' + row } });
23999
+ rowDiv = this.parent.createElement('div', { className: 'e-rte-table-row' + ' ' + this.parent.cssClass, attrs: { 'data-column': '' + row } });
23749
24000
  for (let col = 0; col < 10; col++) {
23750
24001
  const display = (row > 2) ? 'none' : 'inline-block';
23751
- tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default', attrs: { 'data-cell': '' + col } });
24002
+ tableCell = this.parent.createElement('div', { className: 'e-rte-tablecell e-default' + ' ' + this.parent.cssClass, attrs: { 'data-cell': '' + col } });
23752
24003
  rowDiv.appendChild(tableCell);
23753
24004
  tableCell.style.display = display;
23754
24005
  if (col === 0 && row === 0) {
@@ -23771,15 +24022,15 @@ class Table {
23771
24022
  height: 'initial', width: '290px', content: editContent, header: editHeader,
23772
24023
  buttons: [{
23773
24024
  click: this.applyProperties.bind(this, args),
23774
- buttonModel: { content: update, cssClass: 'e-flat e-size-update', isPrimary: true }
24025
+ buttonModel: { content: update, cssClass: 'e-flat e-size-update' + ' ' + this.parent.cssClass, isPrimary: true }
23775
24026
  },
23776
24027
  {
23777
24028
  click: (e) => {
23778
24029
  this.cancelDialog(e);
23779
24030
  },
23780
- buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }
24031
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: cancel }
23781
24032
  }],
23782
- cssClass: this.parent.cssClass
24033
+ cssClass: this.editdlgObj.cssClass + ' e-rte-edit-table-prop-dialog'
23783
24034
  });
23784
24035
  this.editdlgObj.element.style.maxHeight = 'none';
23785
24036
  this.editdlgObj.content.querySelector('input').focus();
@@ -23801,13 +24052,13 @@ class Table {
23801
24052
  height: 'initial', width: '290px', content: dlgContent,
23802
24053
  buttons: [{
23803
24054
  click: proxy.customTable.bind(this, args),
23804
- buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }
24055
+ buttonModel: { content: insert, cssClass: 'e-flat e-insert-table' + ' ' + proxy.parent.cssClass, isPrimary: true }
23805
24056
  },
23806
24057
  {
23807
24058
  click: (e) => {
23808
24059
  proxy.cancelDialog(e);
23809
24060
  },
23810
- buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }
24061
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + proxy.parent.cssClass, content: cancel }
23811
24062
  }]
23812
24063
  });
23813
24064
  if (!isNullOrUndefined(proxy.parent.cssClass)) {
@@ -23819,10 +24070,10 @@ class Table {
23819
24070
  tableCellDlgContent() {
23820
24071
  const tableColumn = this.l10n.getConstant('columns');
23821
24072
  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>';
24073
+ const tableWrap = this.parent.createElement('div', { className: 'e-cell-wrap' + ' ' + this.parent.cssClass });
24074
+ const content = '<div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" '
24075
+ + ' data-role ="none" id="tableColumn" class="e-table-column' + ' ' + this.parent.cssClass + '"/></div>'
24076
+ + '<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
24077
  const contentElem = parseHtml(content);
23827
24078
  tableWrap.appendChild(contentElem);
23828
24079
  this.columnTextBox = new NumericTextBox({
@@ -23865,7 +24116,7 @@ class Table {
23865
24116
  return;
23866
24117
  }
23867
24118
  const tableDialog = this.parent.createElement('div', {
23868
- className: 'e-rte-edit-table', id: this.rteID + '_tabledialog'
24119
+ className: 'e-rte-edit-table' + ' ' + this.parent.cssClass, id: this.rteID + '_tabledialog'
23869
24120
  });
23870
24121
  this.parent.element.appendChild(tableDialog);
23871
24122
  const insert = this.l10n.getConstant('dialogInsert');
@@ -23880,13 +24131,13 @@ class Table {
23880
24131
  position: { X: 'center', Y: (Browser.isDevice) ? 'center' : 'top' },
23881
24132
  isModal: Browser.isDevice,
23882
24133
  buttons: [{
23883
- buttonModel: { content: insert, cssClass: 'e-flat e-insert-table', isPrimary: true }
24134
+ buttonModel: { content: insert, cssClass: 'e-flat e-insert-table' + ' ' + this.parent.cssClass, isPrimary: true }
23884
24135
  },
23885
24136
  {
23886
24137
  click: (e) => {
23887
24138
  this.cancelDialog(e);
23888
24139
  },
23889
- buttonModel: { cssClass: 'e-flat e-cancel', content: cancel }
24140
+ buttonModel: { cssClass: 'e-flat e-cancel' + ' ' + this.parent.cssClass, content: cancel }
23890
24141
  }],
23891
24142
  target: (Browser.isDevice) ? document.body : this.parent.element,
23892
24143
  animationSettings: { effect: 'None' },
@@ -23954,13 +24205,13 @@ class Table {
23954
24205
  const tableWidth = this.l10n.getConstant('tableWidth');
23955
24206
  const cellPadding = this.l10n.getConstant('cellpadding');
23956
24207
  const cellSpacing = this.l10n.getConstant('cellspacing');
23957
- const tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' });
24208
+ const tableWrap = this.parent.createElement('div', { className: 'e-table-sizewrap' + ' ' + this.parent.cssClass });
23958
24209
  const widthVal = closest(selectNode, 'table').getClientRects()[0].width;
23959
24210
  const padVal = closest(selectNode, 'td').style.padding;
23960
24211
  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>';
24212
+ 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 + '" '
24213
+ + ' /></div>' + '<div class="e-rte-field' + ' ' + this.parent.cssClass + '"><input type="text" data-role ="none" id="cellPadding" class="e-cell-padding' + ' ' + this.parent.cssClass + '" />'
24214
+ + ' </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
24215
  const contentElem = parseHtml(content);
23965
24216
  tableWrap.appendChild(contentElem);
23966
24217
  this.tableWidthNum = new NumericTextBox({
@@ -24958,24 +25209,6 @@ var __decorate$1 = (undefined && undefined.__decorate) || function (decorators,
24958
25209
  let RichTextEditor = class RichTextEditor extends Component {
24959
25210
  constructor(options, element) {
24960
25211
  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
25212
  }
24980
25213
  /**
24981
25214
  * To provide the array of modules needed for component rendering
@@ -25056,6 +25289,14 @@ let RichTextEditor = class RichTextEditor extends Component {
25056
25289
  // eslint-disable-next-line
25057
25290
  (this.enabled) ? this.eventInitializer() : this.unWireEvents();
25058
25291
  }
25292
+ initializeValue() {
25293
+ this.isFocusOut = false;
25294
+ this.isRTE = false;
25295
+ this.isBlur = true;
25296
+ this.needsID = true;
25297
+ this.defaultResetValue = null;
25298
+ this.isResizeInitialized = false;
25299
+ }
25059
25300
  /**
25060
25301
  * For internal use only - Initialize the event handler;
25061
25302
  *
@@ -25064,6 +25305,7 @@ let RichTextEditor = class RichTextEditor extends Component {
25064
25305
  * @private
25065
25306
  */
25066
25307
  preRender() {
25308
+ this.initializeValue();
25067
25309
  this.onBlurHandler = this.blurHandler.bind(this);
25068
25310
  this.onFocusHandler = this.focusHandler.bind(this);
25069
25311
  this.onResizeHandler = this.resizeHandler.bind(this);
@@ -25120,11 +25362,18 @@ let RichTextEditor = class RichTextEditor extends Component {
25120
25362
  }
25121
25363
  else {
25122
25364
  this.valueContainer = this.createElement('textarea', {
25123
- id: this.getID() + '-value'
25365
+ id: this.getID() + '-value',
25366
+ attrs: { 'aria-labelledby': this.getID() }
25124
25367
  });
25125
25368
  }
25126
25369
  this.valueContainer.name = this.getID();
25127
25370
  addClass([this.valueContainer], CLS_RTE_HIDDEN);
25371
+ if (!isNullOrUndefined(this.cssClass)) {
25372
+ let currentClassList = this.cssClass.split(' ');
25373
+ for (let i = 0; i < currentClassList.length; i++) {
25374
+ addClass([this.valueContainer], currentClassList[i]);
25375
+ }
25376
+ }
25128
25377
  this.element.appendChild(this.valueContainer);
25129
25378
  }
25130
25379
  /**
@@ -25383,16 +25632,19 @@ let RichTextEditor = class RichTextEditor extends Component {
25383
25632
  const range = this.getRange();
25384
25633
  const currentStartContainer = range.startContainer;
25385
25634
  const currentEndContainer = range.endContainer;
25386
- let currentStartOffset = range.startOffset;
25387
- let isSameContainer = currentStartContainer === currentEndContainer ? true : false;
25388
- let currentEndOffset;
25635
+ const currentStartOffset = range.startOffset;
25636
+ const isSameContainer = currentStartContainer === currentEndContainer ? true : false;
25389
25637
  const endNode = range.endContainer.nodeName === '#text' ? range.endContainer.parentElement :
25390
25638
  range.endContainer;
25391
- let closestLI = closest(endNode, 'LI');
25639
+ const closestLI = closest(endNode, 'LI');
25392
25640
  if (!isNullOrUndefined(closestLI) && endNode.textContent.length === range.endOffset &&
25393
25641
  !range.collapsed && isNullOrUndefined(endNode.nextElementSibling)) {
25394
- closestLI.textContent = closestLI.textContent.trim();
25395
- currentEndOffset = closestLI.textContent.length - 1;
25642
+ for (let i = 0; i < closestLI.childNodes.length; i++) {
25643
+ if (closestLI.childNodes[i].nodeName === "#text" && closestLI.childNodes[i].textContent.trim().length === 0) {
25644
+ detach(closestLI.childNodes[i]);
25645
+ i--;
25646
+ }
25647
+ }
25396
25648
  let currentLastElem = closestLI;
25397
25649
  while (currentLastElem.nodeName !== '#text') {
25398
25650
  currentLastElem = currentLastElem.lastChild;
@@ -25762,6 +26014,12 @@ let RichTextEditor = class RichTextEditor extends Component {
25762
26014
  for (let i = 0; i < this.originalElement.classList.length; i++) {
25763
26015
  addClass([this.element], this.originalElement.classList[i]);
25764
26016
  }
26017
+ if (!isNullOrUndefined(this.cssClass)) {
26018
+ let currentClassList = this.cssClass.split(' ');
26019
+ for (let i = 0; i < currentClassList.length; i++) {
26020
+ addClass([this.element], currentClassList[i]);
26021
+ }
26022
+ }
25765
26023
  removeClass([this.element], CLS_RTE_HIDDEN);
25766
26024
  }
25767
26025
  else {
@@ -26136,7 +26394,7 @@ let RichTextEditor = class RichTextEditor extends Component {
26136
26394
  if (this.inputElement && this.placeholder && this.iframeSettings.enable !== true) {
26137
26395
  if (this.editorMode !== 'Markdown') {
26138
26396
  if (!this.placeHolderWrapper) {
26139
- this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder e-rte-placeholder' });
26397
+ this.placeHolderWrapper = this.createElement('span', { className: 'rte-placeholder e-rte-placeholder' + ' ' + this.cssClass });
26140
26398
  if (this.inputElement) {
26141
26399
  this.inputElement.parentElement.insertBefore(this.placeHolderWrapper, this.inputElement);
26142
26400
  }
@@ -26385,7 +26643,7 @@ let RichTextEditor = class RichTextEditor extends Component {
26385
26643
  this.setProperties({ value: this.valueTemplate });
26386
26644
  }
26387
26645
  else {
26388
- const compiledTemplate = compile(this.valueTemplate)("", this, 'valueTemplate');
26646
+ const compiledTemplate = compile(this.valueTemplate)('', this, 'valueTemplate');
26389
26647
  for (let i = 0; i < compiledTemplate.length; i++) {
26390
26648
  const item = compiledTemplate[i];
26391
26649
  append([item], this.element);
@@ -27335,5 +27593,5 @@ RichTextEditor = __decorate$1([
27335
27593
  * Rich Text Editor component exported items
27336
27594
  */
27337
27595
 
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 };
27596
+ 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, 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, 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
27597
  //# sourceMappingURL=ej2-richtexteditor.es2015.js.map