@syncfusion/ej2-richtexteditor 22.2.12 → 23.1.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/CHANGELOG.md +67 -1
  2. package/dist/ej2-richtexteditor.min.js +3 -3
  3. package/dist/ej2-richtexteditor.umd.min.js +3 -3
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +457 -285
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +457 -281
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/dist/global/ej2-richtexteditor.min.js +3 -3
  10. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  11. package/dist/global/index.d.ts +2 -2
  12. package/package.json +13 -13
  13. package/src/editor-manager/plugin/dom-node.js +6 -5
  14. package/src/editor-manager/plugin/inserthtml.js +1 -1
  15. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +2 -0
  16. package/src/editor-manager/plugin/ms-word-clean-up.js +79 -12
  17. package/src/editor-manager/plugin/selection-exec.js +1 -1
  18. package/src/editor-manager/plugin/table.js +1 -1
  19. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +2 -1
  20. package/src/rich-text-editor/actions/base-quick-toolbar.js +10 -6
  21. package/src/rich-text-editor/actions/emoji-picker.js +29 -14
  22. package/src/rich-text-editor/actions/enter-key.js +9 -2
  23. package/src/rich-text-editor/actions/format-painter.js +12 -6
  24. package/src/rich-text-editor/actions/full-screen.js +3 -0
  25. package/src/rich-text-editor/actions/html-editor.js +14 -1
  26. package/src/rich-text-editor/actions/markdown-editor.js +3 -0
  27. package/src/rich-text-editor/actions/paste-clean-up.d.ts +2 -0
  28. package/src/rich-text-editor/actions/paste-clean-up.js +63 -32
  29. package/src/rich-text-editor/actions/quick-toolbar.js +35 -2
  30. package/src/rich-text-editor/actions/toolbar.js +4 -1
  31. package/src/rich-text-editor/actions/xhtml-validation.js +1 -1
  32. package/src/rich-text-editor/base/classes.d.ts +5 -0
  33. package/src/rich-text-editor/base/classes.js +5 -0
  34. package/src/rich-text-editor/base/constant.d.ts +5 -0
  35. package/src/rich-text-editor/base/constant.js +5 -0
  36. package/src/rich-text-editor/base/enum.d.ts +4 -0
  37. package/src/rich-text-editor/base/interface.d.ts +10 -22
  38. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +1 -39
  39. package/src/rich-text-editor/base/rich-text-editor.d.ts +1 -39
  40. package/src/rich-text-editor/base/rich-text-editor.js +14 -10
  41. package/src/rich-text-editor/base/util.js +5 -1
  42. package/src/rich-text-editor/models/items.js +34 -22
  43. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +4 -5
  44. package/src/rich-text-editor/models/toolbar-settings.d.ts +4 -5
  45. package/src/rich-text-editor/models/toolbar-settings.js +1 -1
  46. package/src/rich-text-editor/renderer/audio-module.js +5 -33
  47. package/src/rich-text-editor/renderer/dialog-renderer.js +1 -1
  48. package/src/rich-text-editor/renderer/image-module.js +19 -65
  49. package/src/rich-text-editor/renderer/link-module.js +6 -0
  50. package/src/rich-text-editor/renderer/render.js +4 -0
  51. package/src/rich-text-editor/renderer/table-module.js +50 -24
  52. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +5 -1
  53. package/src/rich-text-editor/renderer/toolbar-renderer.js +28 -2
  54. package/src/rich-text-editor/renderer/video-module.js +5 -33
  55. package/src/rich-text-editor/renderer/view-source.js +4 -0
  56. package/styles/bootstrap-dark.css +4 -4
  57. package/styles/bootstrap.css +4 -4
  58. package/styles/bootstrap4.css +4 -4
  59. package/styles/bootstrap5-dark.css +4 -4
  60. package/styles/bootstrap5.css +4 -4
  61. package/styles/fabric-dark.css +4 -4
  62. package/styles/fabric.css +4 -4
  63. package/styles/fluent-dark.css +4 -4
  64. package/styles/fluent.css +4 -4
  65. package/styles/highcontrast-light.css +4 -4
  66. package/styles/highcontrast.css +4 -4
  67. package/styles/material-dark.css +4 -5
  68. package/styles/material.css +4 -5
  69. package/styles/material3-dark.css +4 -5
  70. package/styles/material3-dark.scss +1 -1
  71. package/styles/material3.css +4 -5
  72. package/styles/material3.scss +1 -1
  73. package/styles/rich-text-editor/_layout.scss +2 -2
  74. package/styles/rich-text-editor/bootstrap-dark.css +4 -4
  75. package/styles/rich-text-editor/bootstrap-dark.scss +1 -1
  76. package/styles/rich-text-editor/bootstrap.css +4 -4
  77. package/styles/rich-text-editor/bootstrap.scss +1 -1
  78. package/styles/rich-text-editor/bootstrap4.css +4 -4
  79. package/styles/rich-text-editor/bootstrap4.scss +1 -1
  80. package/styles/rich-text-editor/bootstrap5-dark.css +4 -4
  81. package/styles/rich-text-editor/bootstrap5-dark.scss +1 -1
  82. package/styles/rich-text-editor/bootstrap5.css +4 -4
  83. package/styles/rich-text-editor/bootstrap5.scss +1 -1
  84. package/styles/rich-text-editor/fabric-dark.css +4 -4
  85. package/styles/rich-text-editor/fabric-dark.scss +1 -1
  86. package/styles/rich-text-editor/fabric.css +4 -4
  87. package/styles/rich-text-editor/fabric.scss +1 -1
  88. package/styles/rich-text-editor/fluent-dark.css +4 -4
  89. package/styles/rich-text-editor/fluent-dark.scss +1 -1
  90. package/styles/rich-text-editor/fluent.css +4 -4
  91. package/styles/rich-text-editor/fluent.scss +1 -1
  92. package/styles/rich-text-editor/highcontrast-light.css +4 -4
  93. package/styles/rich-text-editor/highcontrast-light.scss +1 -1
  94. package/styles/rich-text-editor/highcontrast.css +4 -4
  95. package/styles/rich-text-editor/highcontrast.scss +1 -1
  96. package/styles/rich-text-editor/material-dark.css +4 -5
  97. package/styles/rich-text-editor/material-dark.scss +1 -1
  98. package/styles/rich-text-editor/material.css +4 -5
  99. package/styles/rich-text-editor/material.scss +1 -1
  100. package/styles/rich-text-editor/material3-dark.css +4 -5
  101. package/styles/rich-text-editor/material3-dark.scss +1 -1
  102. package/styles/rich-text-editor/material3.css +4 -5
  103. package/styles/rich-text-editor/material3.scss +1 -1
  104. package/styles/rich-text-editor/tailwind-dark.css +4 -5
  105. package/styles/rich-text-editor/tailwind-dark.scss +1 -1
  106. package/styles/rich-text-editor/tailwind.css +4 -5
  107. package/styles/rich-text-editor/tailwind.scss +1 -1
  108. package/styles/tailwind-dark.css +4 -5
  109. package/styles/tailwind.css +4 -5
@@ -5,7 +5,7 @@ import { NavigationPaneSettingsModel, SearchSettingsModel, SortOrder } from '@sy
5
5
  import { ToolbarSettingsModel as FileToolbarSettingsModel } from '@syncfusion/ej2-filemanager';
6
6
  import { UploadSettingsModel, ViewType } from '@syncfusion/ej2-filemanager';
7
7
  import { SaveFormat, DisplayLayoutOptions } from '../../common';
8
- import { ToolbarType, ActionOnScroll, ToolbarItems } from '../base/enum';
8
+ import { ToolbarType, ActionOnScroll, ToolbarItems, ToolbarConfigItems } from '../base/enum';
9
9
  import { IToolbarItems, IDropDownItemModel, ColorModeType, IToolsItemConfigs, IListDropDownModel, EmojiIconsSet } from '../base/interface';
10
10
  /**
11
11
  * Configures the toolbar settings of the RichTextEditor.
@@ -39,7 +39,7 @@ export declare class ToolbarSettings extends ChildProperty<ToolbarSettings> {
39
39
  * @default ['Bold', 'Italic', 'Underline', '|', 'Formats', 'Alignments', 'OrderedList',
40
40
  * 'UnorderedList', '|', 'CreateLink', 'Image', '|', 'SourceCode', 'Undo', 'Redo']
41
41
  */
42
- items: (string | IToolbarItems)[];
42
+ items: (string | ToolbarConfigItems | IToolbarItems)[];
43
43
  /**
44
44
  * Using this property, Modify the default toolbar item configuration like icon class.
45
45
  *
@@ -493,10 +493,9 @@ export declare class QuickToolbarSettings extends ChildProperty<QuickToolbarSett
493
493
  /**
494
494
  * Specifies the items to render in quick toolbar, when text selected.
495
495
  *
496
- * @default ['Cut', 'Copy', 'Paste']
497
-
496
+ * @default null
498
497
  */
499
- text: (string | IToolbarItems)[];
498
+ text: (string | ToolbarConfigItems | IToolbarItems)[];
500
499
  /**
501
500
  * Specifies the items to render in quick toolbar, when table selected.
502
501
  *
@@ -304,7 +304,7 @@ var QuickToolbarSettings = /** @class */ (function (_super) {
304
304
  Property(['VideoReplace', 'VideoAlign', 'VideoRemove', 'VideoLayoutOption', 'VideoDimension'])
305
305
  ], QuickToolbarSettings.prototype, "video", void 0);
306
306
  __decorate([
307
- Property(['Cut', 'Copy', 'Paste'])
307
+ Property(null)
308
308
  ], QuickToolbarSettings.prototype, "text", void 0);
309
309
  __decorate([
310
310
  Property(['TableHeader', 'TableRows', 'TableColumns', 'BackgroundColor', '-', 'TableRemove', 'Alignments', 'TableCellVerticalAlign', 'Styles'])
@@ -617,6 +617,9 @@ var Audio = /** @class */ (function () {
617
617
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
618
618
  this.quickToolObj.inlineQTBar.hidePopup();
619
619
  }
620
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
621
+ this.quickToolObj.textQTBar.hidePopup();
622
+ }
620
623
  }
621
624
  };
622
625
  // eslint-disable-next-line
@@ -686,10 +689,8 @@ var Audio = /** @class */ (function () {
686
689
  });
687
690
  uploadParentEle.appendChild(uploadEle);
688
691
  var fileName;
689
- var rawFile;
690
692
  var selectArgs;
691
693
  var filesData;
692
- var beforeUploadArgs;
693
694
  this.uploadObj = new Uploader({
694
695
  asyncSettings: { saveUrl: this.parent.insertAudioSettings.saveUrl, removeUrl: this.parent.insertAudioSettings.removeUrl },
695
696
  dropArea: span, multiple: false, enableRtl: this.parent.enableRtl,
@@ -697,13 +698,8 @@ var Audio = /** @class */ (function () {
697
698
  selected: function (e) {
698
699
  proxy.isAudioUploaded = true;
699
700
  selectArgs = e;
701
+ // eslint-disable-next-line
700
702
  filesData = e.filesData;
701
- if (_this.parent.isServerRendered) {
702
- selectArgs = JSON.parse(JSON.stringify(e));
703
- e.cancel = true;
704
- rawFile = e.filesData;
705
- selectArgs.filesData = rawFile;
706
- }
707
703
  _this.parent.trigger(events.fileSelected, selectArgs, function (selectArgs) {
708
704
  if (!selectArgs.cancel) {
709
705
  _this.checkExtension(selectArgs.filesData[0]);
@@ -726,35 +722,11 @@ var Audio = /** @class */ (function () {
726
722
  });
727
723
  reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);
728
724
  }
729
- if (_this.parent.isServerRendered) {
730
- /* eslint-disable */
731
- _this.uploadObj._internalRenderSelect(selectArgs, rawFile);
732
- /* eslint-enable */
733
- }
734
725
  }
735
726
  });
736
727
  },
737
728
  beforeUpload: function (args) {
738
- if (_this.parent.isServerRendered) {
739
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
740
- beforeUploadArgs.filesData = filesData;
741
- args.cancel = true;
742
- _this.parent.trigger(events.fileUploading, beforeUploadArgs, function (beforeUploadArgs) {
743
- if (beforeUploadArgs.cancel) {
744
- return;
745
- }
746
- /* eslint-disable */
747
- _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
748
- beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;
749
- _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
750
- beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;
751
- _this.uploadObj.uploadFiles(rawFile, null);
752
- /* eslint-enable */
753
- });
754
- }
755
- else {
756
- _this.parent.trigger(events.beforeFileUpload, args);
757
- }
729
+ _this.parent.trigger(events.beforeFileUpload, args);
758
730
  },
759
731
  uploading: function (e) {
760
732
  if (!_this.parent.isServerRendered) {
@@ -55,7 +55,7 @@ var DialogRenderer = /** @class */ (function () {
55
55
  this.parent.trigger(events.beforeDialogOpen, args, this.beforeOpenCallback.bind(this, args));
56
56
  };
57
57
  DialogRenderer.prototype.handleEnterKeyDown = function (args) {
58
- if (args.code === "Enter") {
58
+ if (args.code === 'Enter') {
59
59
  args.preventDefault();
60
60
  }
61
61
  };
@@ -1424,6 +1424,9 @@ var Image = /** @class */ (function () {
1424
1424
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
1425
1425
  this.quickToolObj.inlineQTBar.hidePopup();
1426
1426
  }
1427
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
1428
+ this.quickToolObj.textQTBar.hidePopup();
1429
+ }
1427
1430
  }
1428
1431
  };
1429
1432
  // eslint-disable-next-line
@@ -1479,6 +1482,14 @@ var Image = /** @class */ (function () {
1479
1482
  this.prevSelectedImgEle.style.outline = '';
1480
1483
  }
1481
1484
  }
1485
+ if (target.tagName !== 'IMG') {
1486
+ var items = this.contentModule.getEditPanel().querySelectorAll('img');
1487
+ for (var i = 0; i < items.length; i++) {
1488
+ removeClass([items[i]], 'e-img-focus');
1489
+ removeClass([items[i]], 'e-resize');
1490
+ items[i].style.maxWidth = '';
1491
+ }
1492
+ }
1482
1493
  };
1483
1494
  Image.prototype.removeResizeEle = function () {
1484
1495
  EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);
@@ -1692,10 +1703,8 @@ var Image = /** @class */ (function () {
1692
1703
  });
1693
1704
  uploadParentEle.appendChild(uploadEle);
1694
1705
  var altText;
1695
- var rawFile;
1696
1706
  var selectArgs;
1697
1707
  var filesData;
1698
- var beforeUploadArgs;
1699
1708
  this.uploadObj = new Uploader({
1700
1709
  asyncSettings: { saveUrl: this.parent.insertImageSettings.saveUrl, removeUrl: this.parent.insertImageSettings.removeUrl },
1701
1710
  dropArea: span, multiple: false, enableRtl: this.parent.enableRtl, cssClass: this.parent.cssClass,
@@ -1703,13 +1712,8 @@ var Image = /** @class */ (function () {
1703
1712
  selected: function (e) {
1704
1713
  proxy.isImgUploaded = true;
1705
1714
  selectArgs = e;
1715
+ // eslint-disable-next-line
1706
1716
  filesData = e.filesData;
1707
- if (_this.parent.isServerRendered) {
1708
- selectArgs = JSON.parse(JSON.stringify(e));
1709
- e.cancel = true;
1710
- rawFile = e.filesData;
1711
- selectArgs.filesData = rawFile;
1712
- }
1713
1717
  _this.parent.trigger(events.imageSelected, selectArgs, function (selectArgs) {
1714
1718
  if (!selectArgs.cancel) {
1715
1719
  _this.checkExtension(selectArgs.filesData[0]);
@@ -1740,35 +1744,11 @@ var Image = /** @class */ (function () {
1740
1744
  });
1741
1745
  reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);
1742
1746
  }
1743
- if (_this.parent.isServerRendered) {
1744
- /* eslint-disable */
1745
- _this.uploadObj._internalRenderSelect(selectArgs, rawFile);
1746
- /* eslint-enable */
1747
- }
1748
1747
  }
1749
1748
  });
1750
1749
  },
1751
1750
  beforeUpload: function (args) {
1752
- if (_this.parent.isServerRendered) {
1753
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
1754
- beforeUploadArgs.filesData = filesData;
1755
- args.cancel = true;
1756
- _this.parent.trigger(events.imageUploading, beforeUploadArgs, function (beforeUploadArgs) {
1757
- if (beforeUploadArgs.cancel) {
1758
- return;
1759
- }
1760
- /* eslint-disable */
1761
- _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
1762
- beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;
1763
- _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
1764
- beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;
1765
- _this.uploadObj.uploadFiles(rawFile, null);
1766
- /* eslint-enable */
1767
- });
1768
- }
1769
- else {
1770
- _this.parent.trigger(events.beforeImageUpload, args);
1771
- }
1751
+ _this.parent.trigger(events.beforeImageUpload, args);
1772
1752
  },
1773
1753
  uploading: function (e) {
1774
1754
  if (!_this.parent.isServerRendered) {
@@ -2087,8 +2067,6 @@ var Image = /** @class */ (function () {
2087
2067
  setTimeout(function () {
2088
2068
  proxy.refreshPopup(imageElement);
2089
2069
  }, timeOut);
2090
- var rawFile;
2091
- var beforeUploadArgs;
2092
2070
  this.uploadObj = new Uploader({
2093
2071
  asyncSettings: {
2094
2072
  saveUrl: this.parent.insertImageSettings.saveUrl,
@@ -2114,33 +2092,9 @@ var Image = /** @class */ (function () {
2114
2092
  }, 900);
2115
2093
  },
2116
2094
  beforeUpload: function (args) {
2117
- if (_this.parent.isServerRendered) {
2118
- beforeUploadArgs = JSON.parse(JSON.stringify(args));
2119
- beforeUploadArgs.filesData = rawFile;
2120
- isUploading = true;
2121
- args.cancel = true;
2122
- _this.parent.trigger(events.imageUploading, beforeUploadArgs, function (beforeUploadArgs) {
2123
- if (beforeUploadArgs.cancel) {
2124
- return;
2125
- }
2126
- if (!_this.parent.inlineMode.enable) {
2127
- _this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);
2128
- }
2129
- /* eslint-disable */
2130
- _this.uploadObj.currentRequestHeader = beforeUploadArgs.currentRequest ?
2131
- beforeUploadArgs.currentRequest : _this.uploadObj.currentRequestHeader;
2132
- _this.uploadObj.customFormDatas = beforeUploadArgs.customFormData && beforeUploadArgs.customFormData.length > 0 ?
2133
- beforeUploadArgs.customFormData : _this.uploadObj.customFormDatas;
2134
- _this.uploadObj.uploadFiles(rawFile, null);
2135
- _this.parent.inputElement.contentEditable = 'false';
2136
- /* eslint-enable */
2137
- });
2138
- }
2139
- else {
2140
- _this.parent.trigger(events.beforeImageUpload, args);
2141
- if (!_this.parent.inlineMode.enable) {
2142
- _this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);
2143
- }
2095
+ _this.parent.trigger(events.beforeImageUpload, args);
2096
+ if (!_this.parent.inlineMode.enable) {
2097
+ _this.parent.toolbarModule.baseToolbar.toolbarObj.disable(true);
2144
2098
  }
2145
2099
  },
2146
2100
  uploading: function (e) {
@@ -2165,9 +2119,6 @@ var Image = /** @class */ (function () {
2165
2119
  if (isUploading) {
2166
2120
  e.cancel = true;
2167
2121
  }
2168
- if (_this.parent.isServerRendered) {
2169
- rawFile = e.filesData;
2170
- }
2171
2122
  },
2172
2123
  failure: function (e) {
2173
2124
  isUploading = false;
@@ -2328,6 +2279,9 @@ var Image = /** @class */ (function () {
2328
2279
  /* eslint-enable */
2329
2280
  Image.prototype.destroy = function () {
2330
2281
  this.prevSelectedImgEle = undefined;
2282
+ if (isNOU(this.parent)) {
2283
+ return;
2284
+ }
2331
2285
  this.removeEventListener();
2332
2286
  };
2333
2287
  Image.prototype.moduleDestroy = function () {
@@ -350,6 +350,9 @@ var Link = /** @class */ (function () {
350
350
  if (this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
351
351
  this.quickToolObj.inlineQTBar.hidePopup();
352
352
  }
353
+ if (this.quickToolObj.textQTBar && this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
354
+ this.quickToolObj.textQTBar.hidePopup();
355
+ }
353
356
  }
354
357
  };
355
358
  // eslint-disable-next-line
@@ -523,6 +526,9 @@ var Link = /** @class */ (function () {
523
526
 
524
527
  */
525
528
  Link.prototype.destroy = function () {
529
+ if (isNOU(this.parent)) {
530
+ return;
531
+ }
526
532
  this.removeEventListener();
527
533
  };
528
534
  Link.prototype.moduleDestroy = function () {
@@ -1,5 +1,6 @@
1
1
  import { RenderType } from '../base/enum';
2
2
  import * as events from '../base/constant';
3
+ import { isNullOrUndefined } from '@syncfusion/ej2-base';
3
4
  /**
4
5
  * Content module is used to render Rich Text Editor content
5
6
  *
@@ -49,6 +50,9 @@ var Render = /** @class */ (function () {
49
50
  * @returns {void}
50
51
  */
51
52
  Render.prototype.destroy = function () {
53
+ if (isNullOrUndefined(this.parent)) {
54
+ return;
55
+ }
52
56
  this.removeEventListener();
53
57
  };
54
58
  Render.prototype.moduleDestroy = function () {
@@ -68,6 +68,9 @@ var Table = /** @class */ (function () {
68
68
  this.parent.off(events.bindCssClass, this.setCssClass);
69
69
  this.parent.off(events.destroy, this.destroy);
70
70
  this.parent.off(events.moduleDestroy, this.moduleDestroy);
71
+ if (!Browser.isDevice && this.parent.tableSettings.resize) {
72
+ EventHandler.remove(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper);
73
+ }
71
74
  };
72
75
  Table.prototype.updateCss = function (currentObj, e) {
73
76
  if (currentObj && e.cssClass) {
@@ -474,14 +477,17 @@ var Table = /** @class */ (function () {
474
477
  var pageX = void 0;
475
478
  var pageY = void 0;
476
479
  if (Browser.isDevice && e.args.touches) {
477
- pageX = e.args.changedTouches[0].pageX;
478
- pageY = e.args.changedTouches[0].pageY;
480
+ pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset + this.parent.element.getBoundingClientRect().left +
481
+ e.args.changedTouches[0].clientX : e.args.changedTouches[0].pageX;
482
+ pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + this.parent.element.getBoundingClientRect().top +
483
+ (!this.parent.inlineMode.enable ? this.parent.toolbarModule.getToolbarHeight() : 0)
484
+ + e.args.changedTouches[0].clientY : e.args.changedTouches[0].pageY;
479
485
  }
480
486
  else {
481
487
  pageX = (this.parent.iframeSettings.enable) ? window.pageXOffset
482
488
  + this.parent.element.getBoundingClientRect().left + args.clientX : args.pageX;
483
- pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset +
484
- this.parent.element.getBoundingClientRect().top + args.clientY : args.pageY;
489
+ pageY = (this.parent.iframeSettings.enable) ? window.pageYOffset + this.parent.element.getBoundingClientRect().top +
490
+ this.parent.toolbarModule.getToolbarHeight() + args.clientY : args.pageY;
485
491
  }
486
492
  this.quickToolObj.tableQTBar.showPopup(pageX, pageY, target);
487
493
  this.parent.formatter.editorManager.nodeSelection.restore();
@@ -605,7 +611,12 @@ var Table = /** @class */ (function () {
605
611
  var columns = table.rows[this.calMaxCol(table)].cells;
606
612
  var rows = [];
607
613
  for (var i = 0; i < table.rows.length; i++) {
608
- rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, 1)[0]);
614
+ for (var j = 0; j < table.rows[i].cells.length; j++) {
615
+ if (!table.rows[i].cells[j].hasAttribute('rowspan')) {
616
+ rows.push(Array.prototype.slice.call(table.rows[i].cells, 0, table.rows[i].cells.length)[j]);
617
+ break;
618
+ }
619
+ }
609
620
  }
610
621
  var height = parseInt(getComputedStyle(table).height, 10);
611
622
  var width = parseInt(getComputedStyle(table).width, 10);
@@ -853,6 +864,7 @@ var Table = /** @class */ (function () {
853
864
  var currentTdElement = this.curTable.closest('td');
854
865
  var args = { event: e, requestType: 'table' };
855
866
  var isRowCellsMerged = false;
867
+ var isColCellsMerged = false;
856
868
  var mergedCellIndex;
857
869
  var mergedElement;
858
870
  this.parent.trigger(events.onResize, args, function (resizingArgs) {
@@ -882,7 +894,7 @@ var Table = /** @class */ (function () {
882
894
  var width = parseFloat(_this.columnEle.offsetWidth.toString());
883
895
  var cellRow = _this.curTable.rows[0].cells[0].nodeName === 'TH' ? 1 : 0;
884
896
  var currentTableWidth = void 0;
885
- if (_this.curTable.style.width != '') {
897
+ if (_this.curTable.style.width !== '' && _this.curTable.style.width.includes('%')) {
886
898
  currentTableWidth = parseFloat(_this.curTable.style.width.split('%')[0]);
887
899
  }
888
900
  else {
@@ -945,12 +957,20 @@ var Table = /** @class */ (function () {
945
957
  var isMergedEleResize = false;
946
958
  var leftTableCell = void 0;
947
959
  var rightTableCell = void 0;
960
+ isColCellsMerged = false;
961
+ isRowCellsMerged = false;
962
+ /* eslint-disable */
948
963
  for (var j = 0; j < currentRow.cells.length; j++) {
949
964
  if (currentRow.cells[j].hasAttribute('rowspan') && j <= _this.colIndex) {
950
965
  isRowCellsMerged = true;
951
966
  mergedCellIndex = i;
952
967
  mergedElement = currentRow.cells[j];
953
968
  }
969
+ else if (currentRow.cells[j].hasAttribute('colspan') && j <= currentRow.cells.length) {
970
+ isColCellsMerged = true;
971
+ mergedCellIndex = i;
972
+ mergedElement = currentRow.cells[j];
973
+ }
954
974
  }
955
975
  if (!isNOU(currentRow.cells[i]) && currentRow.cells[i].hasAttribute('colspan')) {
956
976
  index = parseInt(currentRow.cells[i].getAttribute('colspan'), 10) - 1;
@@ -958,14 +978,14 @@ var Table = /** @class */ (function () {
958
978
  else {
959
979
  index = _this.colIndex;
960
980
  }
961
- if (isRowCellsMerged) {
981
+ if (isRowCellsMerged || isColCellsMerged) {
962
982
  var currentResizeRow = void 0;
963
983
  if (currentRow.cells.length < cellColl.length) {
964
- index = currentRow.cells.length === _this.colIndex ?
965
- _this.colIndex - 1 : _this.colIndex - (_this.colIndex - 1);
984
+ index = currentRow.cells.length === _this.colIndex || currentRow === _this.curTable.rows[_this.curTable.rows.length - 1] ?
985
+ _this.colIndex - 1 : _this.colIndex;
966
986
  currentResizeRow = _this.curTable.rows[!isNullOrUndefined(mergedCellIndex) ?
967
987
  mergedCellIndex : _this.colIndex - 1];
968
- if (currentResizeRow && (currentResizeRow.cells[_this.colIndex - 1] === mergedElement ||
988
+ if (currentResizeRow && currentResizeRow !== currentRow && (currentResizeRow.cells[_this.colIndex - 1] === mergedElement ||
969
989
  currentResizeRow.cells[currentResizeRow.cells.length - 1] === mergedElement)) {
970
990
  isMergedEleResize = true;
971
991
  }
@@ -980,10 +1000,10 @@ var Table = /** @class */ (function () {
980
1000
  currentResizeRow.cells[currentResizeRow.cells.length - 1] !== mergedElement) ?
981
1001
  currentResizeRow.cells[_this.colIndex - 1] : currentRow.cells[currentRow.cells.length - 1];
982
1002
  rightTableCell = !isMergedEleResize ? currentRow.cells[index] : rightTableCell && rightTableCell.hasAttribute('rowspan') ?
983
- rightTableCell : currentResizeRow && currentResizeRow.cells[currentResizeRow.cells.length - 1] !== mergedElement ?
1003
+ currentResizeRow.cells[_this.colIndex] : currentResizeRow && currentResizeRow.cells[currentResizeRow.cells.length - 1] !== mergedElement ?
984
1004
  currentRow.cells[index - 1] : currentResizeRow.cells[currentResizeRow.cells.length - 1];
985
1005
  }
986
- if (!isNOU(currentRow.cells[index - 1]) && !isRowCellsMerged) {
1006
+ if (!isNOU(currentRow.cells[index - 1]) && !isRowCellsMerged && !isColCellsMerged) {
987
1007
  currentRow.cells[index - 1].style.width =
988
1008
  _this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';
989
1009
  }
@@ -993,7 +1013,7 @@ var Table = /** @class */ (function () {
993
1013
  _this.convertPixelToPercentage(leftColumnWidth, tableWidth) + '%';
994
1014
  }
995
1015
  }
996
- if (!isNOU(currentRow.cells[index]) && !isRowCellsMerged) {
1016
+ if (!isNOU(currentRow.cells[index]) && !isRowCellsMerged && !isColCellsMerged) {
997
1017
  currentRow.cells[index].style.width =
998
1018
  _this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';
999
1019
  }
@@ -1003,6 +1023,7 @@ var Table = /** @class */ (function () {
1003
1023
  _this.convertPixelToPercentage(rightColWidth, tableWidth) + '%';
1004
1024
  }
1005
1025
  }
1026
+ /* eslint-enable */
1006
1027
  }
1007
1028
  }
1008
1029
  }
@@ -1022,9 +1043,6 @@ var Table = /** @class */ (function () {
1022
1043
  _this.updateHelper();
1023
1044
  }
1024
1045
  else if (_this.resizeBtnStat.tableBox) {
1025
- if (!Browser.isDevice) {
1026
- EventHandler.remove(_this.contentModule.getEditPanel(), 'mouseover', _this.resizeHelper);
1027
- }
1028
1046
  if (currentTdElement) {
1029
1047
  var tableBoxPosition = _this.curTable.getBoundingClientRect().left
1030
1048
  - currentTdElement.getBoundingClientRect().left;
@@ -1035,9 +1053,11 @@ var Table = /** @class */ (function () {
1035
1053
  _this.curTable.style.width = widthType ? _this.convertPixelToPercentage(tableWidth + mouseX, widthCompare) + '%'
1036
1054
  : tableWidth + mouseX + 'px';
1037
1055
  _this.curTable.style.height = tableHeight + mouseY + 'px';
1038
- tableReBox.classList.add('e-rbox-select');
1039
- tableReBox.style.cssText = 'top: ' + (_this.calcPos(_this.curTable).top + tableHeight - 4) +
1040
- 'px; left:' + (_this.calcPos(_this.curTable).left + tableWidth - 4) + 'px;';
1056
+ if (!isNOU(tableReBox)) {
1057
+ tableReBox.classList.add('e-rbox-select');
1058
+ tableReBox.style.cssText = 'top: ' + (_this.calcPos(_this.curTable).top + tableHeight - 4) +
1059
+ 'px; left:' + (_this.calcPos(_this.curTable).left + tableWidth - 4) + 'px;';
1060
+ }
1041
1061
  }
1042
1062
  }
1043
1063
  });
@@ -1072,9 +1092,6 @@ var Table = /** @class */ (function () {
1072
1092
  EventHandler.remove(this.contentModule.getDocument(), Browser.touchEndEvent, this.resizeEnd);
1073
1093
  if (this.contentModule.getEditPanel().querySelector('.e-table-box') &&
1074
1094
  this.contentModule.getEditPanel().contains(this.contentModule.getEditPanel().querySelector('.e-table-box'))) {
1075
- if (!Browser.isDevice) {
1076
- EventHandler.add(this.contentModule.getEditPanel(), 'mouseover', this.resizeHelper, this);
1077
- }
1078
1095
  this.removeResizeElement();
1079
1096
  }
1080
1097
  if (this.helper && this.contentModule.getEditPanel().contains(this.helper)) {
@@ -1138,7 +1155,8 @@ var Table = /** @class */ (function () {
1138
1155
  };
1139
1156
  Table.prototype.renderDlgContent = function (args) {
1140
1157
  var _this = this;
1141
- if (Browser.isDevice || this.parent.inlineMode.enable) {
1158
+ var argsTarget = args.args.originalEvent.target;
1159
+ if (Browser.isDevice || this.parent.inlineMode.enable || !isNullOrUndefined(closest(argsTarget, '.e-rte-text-popup'))) {
1142
1160
  this.insertTableDialog(args);
1143
1161
  return;
1144
1162
  }
@@ -1394,6 +1412,10 @@ var Table = /** @class */ (function () {
1394
1412
  if (this.quickToolObj && this.quickToolObj.inlineQTBar && document.body.contains(this.quickToolObj.inlineQTBar.element)) {
1395
1413
  this.quickToolObj.inlineQTBar.hidePopup();
1396
1414
  }
1415
+ if (this.quickToolObj && this.quickToolObj.textQTBar &&
1416
+ this.parent.element.ownerDocument.body.contains(this.quickToolObj.textQTBar.element)) {
1417
+ this.quickToolObj.textQTBar.hidePopup();
1418
+ }
1397
1419
  };
1398
1420
  Table.prototype.customTable = function (args, e) {
1399
1421
  var proxy = (this.self) ? this.self : this;
@@ -1401,7 +1423,8 @@ var Table = /** @class */ (function () {
1401
1423
  var argument = ((Browser.isDevice || (!isNullOrUndefined(args.args)
1402
1424
  && !isNullOrUndefined(args.args.originalEvent) &&
1403
1425
  args.args.originalEvent.action === 'insert-table')
1404
- || proxy.parent.inlineMode.enable) ? args : this);
1426
+ || proxy.parent.inlineMode.enable || !isNullOrUndefined(proxy.parent.quickToolbarSettings.text)) ? args :
1427
+ this);
1405
1428
  proxy.tableInsert(proxy.rowTextBox.value, proxy.columnTextBox.value, e, argument);
1406
1429
  }
1407
1430
  };
@@ -1497,6 +1520,9 @@ var Table = /** @class */ (function () {
1497
1520
 
1498
1521
  */
1499
1522
  Table.prototype.destroy = function () {
1523
+ if (isNOU(this.parent)) {
1524
+ return;
1525
+ }
1500
1526
  this.removeEventListener();
1501
1527
  };
1502
1528
  Table.prototype.moduleDestroy = function () {
@@ -1,6 +1,7 @@
1
1
  import { DropDownButton } from '@syncfusion/ej2-splitbuttons';
2
2
  import { IRenderer, IRichTextEditor, IToolbarOptions, IDropDownModel, IColorPickerModel } from '../base/interface';
3
3
  import { ColorPicker } from '@syncfusion/ej2-inputs';
4
+ import { ServiceLocator } from '../services/service-locator';
4
5
  /**
5
6
  * `Toolbar renderer` module is used to render toolbar in RichTextEditor.
6
7
  *
@@ -21,12 +22,14 @@ export declare class ToolbarRenderer implements IRenderer {
21
22
  private currentDropdown;
22
23
  private popupOverlay;
23
24
  private tooltip;
25
+ private l10n;
24
26
  /**
25
27
  * Constructor for toolbar renderer module
26
28
  *
27
29
  * @param {IRichTextEditor} parent - specifies the parent element.
30
+ * @param {ServiceLocator} serviceLocator - specifies the serviceLocator
28
31
  */
29
- constructor(parent?: IRichTextEditor);
32
+ constructor(parent?: IRichTextEditor, serviceLocator?: ServiceLocator);
30
33
  private wireEvent;
31
34
  private destroyTooltip;
32
35
  private unWireEvent;
@@ -35,6 +38,7 @@ export declare class ToolbarRenderer implements IRenderer {
35
38
  private toolbarClicked;
36
39
  private dropDownSelected;
37
40
  private beforeDropDownItemRender;
41
+ private tooltipBeforeRender;
38
42
  private dropDownOpen;
39
43
  private dropDownClose;
40
44
  private removePopupContainer;
@@ -19,9 +19,13 @@ var ToolbarRenderer = /** @class */ (function () {
19
19
  * Constructor for toolbar renderer module
20
20
  *
21
21
  * @param {IRichTextEditor} parent - specifies the parent element.
22
+ * @param {ServiceLocator} serviceLocator - specifies the serviceLocator
22
23
  */
23
- function ToolbarRenderer(parent) {
24
+ function ToolbarRenderer(parent, serviceLocator) {
24
25
  this.parent = parent;
26
+ if (serviceLocator) {
27
+ this.l10n = serviceLocator.getService('rteLocale');
28
+ }
25
29
  this.wireEvent();
26
30
  }
27
31
  ToolbarRenderer.prototype.wireEvent = function () {
@@ -29,7 +33,11 @@ var ToolbarRenderer = /** @class */ (function () {
29
33
  this.parent.on(events.maximizeMinimizeClick, this.destroyTooltip, this);
30
34
  };
31
35
  ToolbarRenderer.prototype.destroyTooltip = function () {
32
- this.tooltip.close();
36
+ if (!isNullOrUndefined(document.querySelector('.e-tooltip-wrap')) && !isNullOrUndefined(document.querySelector(' [data-tooltip-id]'))) {
37
+ var tooltipTargetEle = document.querySelector('#' + (this.parent.element).id + ' [data-tooltip-id]');
38
+ var event_1 = new MouseEvent('mouseleave', { bubbles: true, cancelable: true });
39
+ tooltipTargetEle.dispatchEvent(event_1);
40
+ }
33
41
  };
34
42
  ToolbarRenderer.prototype.unWireEvent = function () {
35
43
  this.parent.off(events.destroy, this.unWireEvent);
@@ -65,6 +73,22 @@ var ToolbarRenderer = /** @class */ (function () {
65
73
  }
66
74
  this.parent.notify(events.beforeDropDownItemRender, args);
67
75
  };
76
+ ToolbarRenderer.prototype.tooltipBeforeRender = function (args) {
77
+ if (!isNOU(args.target.getAttribute('title'))) {
78
+ var tooltipTarget = args.target.getAttribute('title');
79
+ var tooltipText = void 0;
80
+ switch (tooltipTarget) {
81
+ case 'Minimize':
82
+ tooltipText = this.l10n.getConstant('minimize');
83
+ args.target.setAttribute('title', tooltipText + ' (Esc)');
84
+ break;
85
+ case 'Maximize':
86
+ tooltipText = this.l10n.getConstant('maximize');
87
+ args.target.setAttribute('title', tooltipText + ' (Ctrl+Shift+F)');
88
+ break;
89
+ }
90
+ }
91
+ };
68
92
  ToolbarRenderer.prototype.dropDownOpen = function (args) {
69
93
  if (args.element.parentElement.getAttribute('id').indexOf('TableCell') > -1 && !isNOU(args.element.parentElement.querySelector('.e-cell-merge')) &&
70
94
  (!isNOU(args.element.parentElement.querySelector('.e-cell-horizontal-split')) || !isNOU(args.element.parentElement.querySelector('.e-cell-vertical-split')))) {
@@ -130,6 +154,8 @@ var ToolbarRenderer = /** @class */ (function () {
130
154
  target: '#' + this.parent.getID() + '_toolbar_wrapper [title]',
131
155
  showTipPointer: true,
132
156
  openDelay: 400,
157
+ opensOn: 'Hover',
158
+ beforeRender: this.tooltipBeforeRender.bind(this),
133
159
  cssClass: this.parent.cssClass,
134
160
  windowCollision: true,
135
161
  position: 'BottomCenter'