@syncfusion/ej2-richtexteditor 20.2.49 → 20.3.47

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 (150) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/ej2-richtexteditor.min.js +10 -0
  3. package/dist/ej2-richtexteditor.umd.min.js +2 -2
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +3790 -358
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +3780 -319
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/dist/global/ej2-richtexteditor.min.js +2 -2
  10. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  11. package/dist/global/index.d.ts +1 -1
  12. package/package.json +13 -13
  13. package/src/common/config.js +2 -0
  14. package/src/common/types.d.ts +4 -0
  15. package/src/editor-manager/base/classes.d.ts +16 -0
  16. package/src/editor-manager/base/classes.js +16 -0
  17. package/src/editor-manager/base/constant.d.ts +2 -0
  18. package/src/editor-manager/base/constant.js +2 -0
  19. package/src/editor-manager/base/editor-manager.d.ts +4 -0
  20. package/src/editor-manager/base/editor-manager.js +14 -0
  21. package/src/editor-manager/base/interface.d.ts +2 -0
  22. package/src/editor-manager/plugin/audio.d.ts +32 -0
  23. package/src/editor-manager/plugin/audio.js +133 -0
  24. package/src/editor-manager/plugin/dom-node.js +1 -1
  25. package/src/editor-manager/plugin/image.js +1 -1
  26. package/src/editor-manager/plugin/inserthtml.js +1 -1
  27. package/src/editor-manager/plugin/lists.js +10 -8
  28. package/src/editor-manager/plugin/ms-word-clean-up.js +18 -18
  29. package/src/editor-manager/plugin/nodecutter.d.ts +1 -1
  30. package/src/editor-manager/plugin/nodecutter.js +7 -5
  31. package/src/editor-manager/plugin/selection-commands.js +3 -2
  32. package/src/editor-manager/plugin/table.js +3 -2
  33. package/src/editor-manager/plugin/undo.js +2 -1
  34. package/src/editor-manager/plugin/video.d.ts +34 -0
  35. package/src/editor-manager/plugin/video.js +249 -0
  36. package/src/editor-manager/plugin.d.ts +2 -0
  37. package/src/editor-manager/plugin.js +2 -0
  38. package/src/global.js +1 -1
  39. package/src/rich-text-editor/actions/base-quick-toolbar.js +3 -1
  40. package/src/rich-text-editor/actions/base-toolbar.js +1 -1
  41. package/src/rich-text-editor/actions/dropdown-buttons.d.ts +2 -2
  42. package/src/rich-text-editor/actions/dropdown-buttons.js +14 -11
  43. package/src/rich-text-editor/actions/enter-key.d.ts +1 -0
  44. package/src/rich-text-editor/actions/enter-key.js +157 -103
  45. package/src/rich-text-editor/actions/html-editor.d.ts +1 -0
  46. package/src/rich-text-editor/actions/html-editor.js +59 -1
  47. package/src/rich-text-editor/actions/paste-clean-up.js +2 -1
  48. package/src/rich-text-editor/actions/quick-toolbar.d.ts +2 -0
  49. package/src/rich-text-editor/actions/quick-toolbar.js +52 -6
  50. package/src/rich-text-editor/actions/resize.js +11 -1
  51. package/src/rich-text-editor/actions/toolbar-action.js +2 -1
  52. package/src/rich-text-editor/actions/xhtml-validation.js +1 -1
  53. package/src/rich-text-editor/audio.d.ts +4 -0
  54. package/src/rich-text-editor/audio.js +4 -0
  55. package/src/rich-text-editor/base/classes.d.ts +50 -0
  56. package/src/rich-text-editor/base/classes.js +50 -0
  57. package/src/rich-text-editor/base/constant.d.ts +74 -14
  58. package/src/rich-text-editor/base/constant.js +76 -16
  59. package/src/rich-text-editor/base/enum.d.ts +10 -2
  60. package/src/rich-text-editor/base/enum.js +10 -2
  61. package/src/rich-text-editor/base/interface.d.ts +86 -2
  62. package/src/rich-text-editor/base/interface.js +8 -0
  63. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +130 -29
  64. package/src/rich-text-editor/base/rich-text-editor.d.ts +150 -30
  65. package/src/rich-text-editor/base/rich-text-editor.js +200 -6
  66. package/src/rich-text-editor/formatter/formatter.js +7 -2
  67. package/src/rich-text-editor/models/default-locale.js +46 -0
  68. package/src/rich-text-editor/models/items.d.ts +3 -0
  69. package/src/rich-text-editor/models/items.js +100 -3
  70. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +169 -1
  71. package/src/rich-text-editor/models/toolbar-settings.d.ts +143 -1
  72. package/src/rich-text-editor/models/toolbar-settings.js +88 -0
  73. package/src/rich-text-editor/renderer/audio-module.d.ts +76 -0
  74. package/src/rich-text-editor/renderer/audio-module.js +875 -0
  75. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  76. package/src/rich-text-editor/renderer/image-module.js +9 -6
  77. package/src/rich-text-editor/renderer/link-module.js +2 -1
  78. package/src/rich-text-editor/renderer/table-module.d.ts +2 -0
  79. package/src/rich-text-editor/renderer/table-module.js +43 -7
  80. package/src/rich-text-editor/renderer/video-module.d.ts +105 -0
  81. package/src/rich-text-editor/renderer/video-module.js +1422 -0
  82. package/src/rich-text-editor/renderer/view-source.js +2 -0
  83. package/src/rich-text-editor/renderer.d.ts +2 -0
  84. package/src/rich-text-editor/renderer.js +2 -0
  85. package/src/rich-text-editor/video.d.ts +4 -0
  86. package/src/rich-text-editor/video.js +4 -0
  87. package/styles/_all.scss +1 -2
  88. package/styles/bootstrap-dark.css +220 -70
  89. package/styles/bootstrap.css +220 -70
  90. package/styles/bootstrap4.css +220 -70
  91. package/styles/bootstrap5-dark.css +220 -70
  92. package/styles/bootstrap5.css +220 -70
  93. package/styles/fabric-dark.css +220 -70
  94. package/styles/fabric.css +222 -72
  95. package/styles/fluent-dark.css +222 -72
  96. package/styles/fluent.css +222 -72
  97. package/styles/highcontrast-light.css +222 -72
  98. package/styles/highcontrast.css +222 -72
  99. package/styles/material-dark.css +220 -70
  100. package/styles/material.css +220 -70
  101. package/styles/rich-text-editor/_all.scss +1 -1
  102. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +3 -0
  103. package/styles/rich-text-editor/_bootstrap-definition.scss +2 -1
  104. package/styles/rich-text-editor/_bootstrap4-definition.scss +5 -3
  105. package/styles/rich-text-editor/_bootstrap5-definition.scss +8 -3
  106. package/styles/rich-text-editor/_fabric-dark-definition.scss +3 -0
  107. package/styles/rich-text-editor/_fabric-definition.scss +2 -0
  108. package/styles/rich-text-editor/_fluent-definition.scss +8 -3
  109. package/styles/rich-text-editor/_fusionnew-definition.scss +8 -3
  110. package/styles/rich-text-editor/_highcontrast-definition.scss +2 -0
  111. package/styles/rich-text-editor/_highcontrast-light-definition.scss +2 -0
  112. package/styles/rich-text-editor/_layout.scss +116 -74
  113. package/styles/rich-text-editor/_material-dark-definition.scss +3 -0
  114. package/styles/rich-text-editor/_material-definition.scss +2 -0
  115. package/styles/rich-text-editor/_material3-definition.scss +8 -3
  116. package/styles/rich-text-editor/_tailwind-definition.scss +7 -2
  117. package/styles/rich-text-editor/_theme.scss +74 -15
  118. package/styles/rich-text-editor/bootstrap-dark.css +220 -70
  119. package/styles/rich-text-editor/bootstrap.css +220 -70
  120. package/styles/rich-text-editor/bootstrap4.css +220 -70
  121. package/styles/rich-text-editor/bootstrap5-dark.css +220 -70
  122. package/styles/rich-text-editor/bootstrap5.css +220 -70
  123. package/styles/rich-text-editor/fabric-dark.css +220 -70
  124. package/styles/rich-text-editor/fabric.css +222 -72
  125. package/styles/rich-text-editor/fluent-dark.css +222 -72
  126. package/styles/rich-text-editor/fluent.css +222 -72
  127. package/styles/rich-text-editor/highcontrast-light.css +222 -72
  128. package/styles/rich-text-editor/highcontrast.css +222 -72
  129. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +20 -4
  130. package/styles/rich-text-editor/icons/_bootstrap.scss +20 -4
  131. package/styles/rich-text-editor/icons/_bootstrap4.scss +20 -4
  132. package/styles/rich-text-editor/icons/_bootstrap5.scss +20 -4
  133. package/styles/rich-text-editor/icons/_fabric-dark.scss +20 -4
  134. package/styles/rich-text-editor/icons/_fabric.scss +20 -4
  135. package/styles/rich-text-editor/icons/_fluent.scss +20 -4
  136. package/styles/rich-text-editor/icons/_fusionnew.scss +20 -4
  137. package/styles/rich-text-editor/icons/_highcontrast-light.scss +20 -4
  138. package/styles/rich-text-editor/icons/_highcontrast.scss +20 -4
  139. package/styles/rich-text-editor/icons/_material-dark.scss +20 -4
  140. package/styles/rich-text-editor/icons/_material.scss +20 -4
  141. package/styles/rich-text-editor/icons/_material3.scss +20 -4
  142. package/styles/rich-text-editor/icons/_tailwind.scss +20 -4
  143. package/styles/rich-text-editor/material-dark.css +220 -70
  144. package/styles/rich-text-editor/material.css +220 -70
  145. package/styles/rich-text-editor/tailwind-dark.css +220 -70
  146. package/styles/rich-text-editor/tailwind.css +220 -70
  147. package/styles/tailwind-dark.css +220 -70
  148. package/styles/tailwind.css +220 -70
  149. package/.eslintrc.json +0 -244
  150. package/tslint.json +0 -111
@@ -35,6 +35,7 @@ var EnterKeyAction = /** @class */ (function () {
35
35
  var _this = this;
36
36
  this.getRangeNode();
37
37
  var isTableEnter = true;
38
+ this.formatTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote'];
38
39
  if (!isNOU(this.startNode.closest('TABLE')) && !isNOU(this.endNode.closest('TABLE'))) {
39
40
  isTableEnter = false;
40
41
  var curElement = this.startNode;
@@ -76,16 +77,27 @@ var EnterKeyAction = /** @class */ (function () {
76
77
  else if (_this.parent.inputElement === _this.range.startContainer) {
77
78
  var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];
78
79
  if (focusElem.nodeName === '#text' && focusElem.textContent.length === 0) {
79
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.previousSibling.textContent.length);
80
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length === 0 ? 0 : focusElem.previousSibling.textContent.length);
80
81
  }
81
82
  else {
82
83
  _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length >= 0 ? 0 : 1);
83
84
  if (focusElem.previousSibling.textContent.length === 0) {
84
85
  detach(focusElem.previousSibling);
86
+ if (!shiftKey_1) {
87
+ var currentFocusElem = !isNOU(focusElem.lastChild) ? focusElem.lastChild : focusElem;
88
+ while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' && currentFocusElem.nodeName !== 'BR') {
89
+ currentFocusElem = currentFocusElem.lastChild;
90
+ }
91
+ if (currentFocusElem.nodeName != 'BR' && currentFocusElem.parentElement.textContent.length === 0 && currentFocusElem.parentElement.innerHTML.length === 0 &&
92
+ currentFocusElem.parentElement.nodeName != 'BR') {
93
+ currentFocusElem.parentElement.appendChild(_this.parent.createElement('BR'));
94
+ }
95
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem.nodeName === 'BR' ? currentFocusElem : currentFocusElem.parentElement, currentFocusElem.parentElement.textContent.length >= 0 || currentFocusElem.nodeName === 'BR' ? 0 : 1);
96
+ }
85
97
  }
86
98
  else if (focusElem.textContent.length === 0) {
87
- var currentFocusElem = focusElem.previousSibling.lastChild;
88
- while (currentFocusElem.nodeName !== '#text') {
99
+ var currentFocusElem = focusElem.previousSibling.nodeName === '#text' ? focusElem.previousSibling : focusElem.previousSibling.lastChild;
100
+ while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
89
101
  currentFocusElem = currentFocusElem.lastChild;
90
102
  }
91
103
  _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, currentFocusElem.textContent.length);
@@ -102,121 +114,154 @@ var EnterKeyAction = /** @class */ (function () {
102
114
  }
103
115
  if (_this.range.startContainer === _this.range.endContainer &&
104
116
  _this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.parent.inputElement) {
105
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], 0);
117
+ if (!isNOU(_this.range.startContainer.childNodes[_this.range.startOffset]) &&
118
+ !isNOU(_this.range.startContainer.childNodes[_this.range.startOffset].previousElementSibling) &&
119
+ _this.range.startContainer.childNodes[_this.range.startOffset].previousElementSibling.nodeName === 'TABLE') {
120
+ _this.parent.tableModule.removeResizeElement();
121
+ }
122
+ if (!(_this.parent.inputElement.childNodes.length === 1 && _this.parent.inputElement.childNodes[0].nodeName === 'TABLE')) {
123
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], 0);
124
+ }
106
125
  _this.getRangeNode();
107
126
  }
108
127
  if ((_this.parent.enterKey === 'P' && !shiftKey_1) || (_this.parent.enterKey === 'DIV' && !shiftKey_1) ||
109
128
  (_this.parent.shiftEnterKey === 'P' && shiftKey_1) ||
110
129
  (_this.parent.shiftEnterKey === 'DIV' && shiftKey_1)) {
111
- var nearBlockNode = void 0;
112
- if (isTableEnter && _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {
113
- nearBlockNode = _this.startNode;
130
+ if (_this.range.startOffset === 1 && _this.parent.inputElement.childNodes.length === 1 && _this.parent.inputElement.childNodes[0].nodeName === 'TABLE') {
131
+ var newElem = _this.createInsertElement(shiftKey_1);
132
+ newElem.appendChild(_this.parent.createElement('BR'));
133
+ _this.parent.inputElement.appendChild(newElem);
134
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);
114
135
  }
115
136
  else {
116
- nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);
117
- }
118
- var isImageNode = false;
119
- var isFocusedFirst = false;
120
- if (_this.range.startOffset != 0 && _this.range.endOffset != 0 && _this.range.startContainer === _this.range.endContainer &&
121
- !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {
122
- var startNodeText = _this.range.startContainer.textContent;
123
- var splitFirstText = startNodeText.substring(0, _this.range.startOffset);
124
- if (splitFirstText.charCodeAt(_this.range.startOffset - 1) != 160 && splitFirstText.trim().length === 0) {
125
- isFocusedFirst = true;
126
- }
127
- }
128
- else if (_this.range.startOffset === 0 && _this.range.endOffset === 0) {
129
- isFocusedFirst = true;
130
- }
131
- _this.removeBRElement(nearBlockNode);
132
- var fireFoxEnterAtMiddle = Browser.userAgent.indexOf('Firefox') != -1 && _this.range.startOffset === 0 && _this.range.startContainer === _this.range.endContainer &&
133
- _this.range.startContainer.nodeName === '#text' && !_this.parent.formatter.editorManager.domNode.isBlockNode(_this.range.startContainer.previousSibling) &&
134
- _this.range.startContainer.parentElement === _this.range.startContainer.previousSibling.parentElement;
135
- if (!fireFoxEnterAtMiddle && ((_this.range.startOffset === 0 && _this.range.endOffset === 0) || isFocusedFirst) &&
136
- !(!isNOU(_this.range.startContainer.previousSibling) &&
137
- (_this.range.startContainer.previousSibling.nodeName === 'IMG' || _this.range.startContainer.previousSibling.nodeName === 'BR'))) {
138
- var isNearBlockLengthZero = void 0;
139
- var newElem = void 0;
140
- if (_this.range.startContainer.nodeName === 'IMG') {
141
- newElem = _this.createInsertElement(shiftKey_1);
142
- isImageNode = true;
143
- isNearBlockLengthZero = false;
137
+ var nearBlockNode = void 0;
138
+ if (isTableEnter && _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {
139
+ nearBlockNode = _this.startNode;
144
140
  }
145
141
  else {
146
- if (nearBlockNode.textContent.trim().length !== 0 ||
147
- nearBlockNode.childNodes[0].nodeName === 'IMG') {
148
- newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
142
+ nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);
143
+ }
144
+ var isImageNode = false;
145
+ var isFocusedFirst = false;
146
+ if (_this.range.startOffset !== 0 && _this.range.endOffset !== 0 &&
147
+ _this.range.startContainer === _this.range.endContainer && !(!isNOU(nearBlockNode.childNodes[0])
148
+ && nearBlockNode.childNodes[0].nodeName === 'IMG')) {
149
+ var startNodeText = _this.range.startContainer.textContent;
150
+ var splitFirstText = startNodeText.substring(0, _this.range.startOffset);
151
+ if (splitFirstText.charCodeAt(_this.range.startOffset - 1) !== 160 && splitFirstText.trim().length === 0) {
152
+ isFocusedFirst = true;
153
+ }
154
+ }
155
+ else if (_this.range.startOffset === 0 && _this.range.endOffset === 0) {
156
+ isFocusedFirst = true;
157
+ }
158
+ _this.removeBRElement(nearBlockNode);
159
+ var fireFoxEnterAtMiddle = Browser.userAgent.indexOf('Firefox') !== -1 && _this.range.startOffset === 0 && _this.range.startContainer === _this.range.endContainer &&
160
+ _this.range.startContainer.nodeName === '#text' && !_this.parent.formatter.editorManager.domNode.isBlockNode(_this.range.startContainer.previousSibling) &&
161
+ _this.range.startContainer.parentElement === _this.range.startContainer.previousSibling.parentElement;
162
+ if (!fireFoxEnterAtMiddle && ((_this.range.startOffset === 0 && _this.range.endOffset === 0) || isFocusedFirst) &&
163
+ !(!isNOU(_this.range.startContainer.previousSibling) &&
164
+ (_this.range.startContainer.previousSibling.nodeName === 'IMG' || _this.range.startContainer.previousSibling.nodeName === 'BR'))) {
165
+ var isNearBlockLengthZero = void 0;
166
+ var newElem = void 0;
167
+ if (_this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.nodeName === 'TABLE') {
168
+ newElem = _this.createInsertElement(shiftKey_1);
169
+ isImageNode = true;
149
170
  isNearBlockLengthZero = false;
150
171
  }
151
172
  else {
152
- newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
153
- isNearBlockLengthZero = true;
173
+ if ((nearBlockNode.textContent.trim().length !== 0 ||
174
+ nearBlockNode.childNodes[0].nodeName === 'IMG')) {
175
+ if ((_this.range.startOffset === _this.range.endOffset && _this.range.startOffset != 0)) {
176
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
177
+ }
178
+ else {
179
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
180
+ isImageNode = true;
181
+ }
182
+ isNearBlockLengthZero = false;
183
+ }
184
+ else {
185
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
186
+ isNearBlockLengthZero = true;
187
+ }
154
188
  }
155
- }
156
- var insertElem = _this.createInsertElement(shiftKey_1);
157
- while (newElem.firstChild) {
158
- insertElem.appendChild(newElem.firstChild);
159
- }
160
- nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);
161
- if (!isNearBlockLengthZero) {
162
- var currentFocusElem = insertElem;
163
- var finalFocusElem = void 0;
164
- while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
165
- finalFocusElem = currentFocusElem;
166
- currentFocusElem = currentFocusElem.lastChild;
189
+ var insertElem = void 0;
190
+ if (_this.formatTags.indexOf(newElem.nodeName.toLocaleLowerCase()) < 0) {
191
+ insertElem = _this.createInsertElement(shiftKey_1);
167
192
  }
168
- finalFocusElem.innerHTML = '<br>';
169
- if (!isImageNode) {
170
- detach(nearBlockNode);
193
+ else {
194
+ insertElem = _this.parent.createElement(newElem.nodeName);
171
195
  }
196
+ while (newElem.firstChild) {
197
+ insertElem.appendChild(newElem.firstChild);
198
+ }
199
+ nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);
200
+ if (!isNearBlockLengthZero) {
201
+ var currentFocusElem = insertElem;
202
+ var finalFocusElem = void 0;
203
+ while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
204
+ finalFocusElem = currentFocusElem;
205
+ currentFocusElem = currentFocusElem.lastChild;
206
+ }
207
+ finalFocusElem.innerHTML = '<br>';
208
+ if (!isImageNode) {
209
+ detach(nearBlockNode);
210
+ }
211
+ }
212
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem.nextElementSibling, 0);
172
213
  }
173
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem.nextElementSibling, 0);
174
- }
175
- else if (nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {
176
- if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {
177
- var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
178
- _this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);
179
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);
180
- }
181
- else {
182
- var insertElem = _this.createInsertElement(shiftKey_1);
183
- insertElem.innerHTML = '<br>';
184
- _this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);
185
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);
186
- }
187
- }
188
- else {
189
- var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
190
- if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&
191
- newElem.childNodes[0].textContent.length === 0) {
192
- detach(newElem.childNodes[0]);
193
- }
194
- if (newElem.textContent.trim().length === 0) {
195
- var brElm = _this.parent.createElement('br');
196
- if (_this.startNode.nodeName === 'A') {
197
- var startParentElem = _this.startNode.parentElement;
198
- _this.startNode.parentElement.insertBefore(brElm, _this.startNode);
199
- detach(_this.startNode);
200
- _this.startNode = startParentElem;
214
+ else if (nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {
215
+ if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {
216
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
217
+ _this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);
218
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);
201
219
  }
202
220
  else {
203
- _this.startNode.appendChild(brElm);
221
+ var insertElem = _this.createInsertElement(shiftKey_1);
222
+ insertElem.innerHTML = '<br>';
223
+ _this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);
224
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);
204
225
  }
205
- if (newElem.childNodes[0].textContent === '\n') {
226
+ }
227
+ else {
228
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
229
+ if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&
230
+ newElem.childNodes[0].textContent.length === 0) {
206
231
  detach(newElem.childNodes[0]);
207
232
  }
208
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);
209
- }
210
- if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||
211
- _this.parent.shiftEnterKey === 'P') && shiftKey_1)) {
212
- var insertElm = _this.createInsertElement(shiftKey_1);
213
- while (newElem.firstChild) {
214
- insertElm.appendChild(newElem.firstChild);
233
+ if (newElem.textContent.trim().length === 0) {
234
+ var brElm = _this.parent.createElement('br');
235
+ if (_this.startNode.nodeName === 'A') {
236
+ var startParentElem = _this.startNode.parentElement;
237
+ _this.startNode.parentElement.insertBefore(brElm, _this.startNode);
238
+ detach(_this.startNode);
239
+ _this.startNode = startParentElem;
240
+ }
241
+ else {
242
+ if (_this.startNode.nodeName != 'BR') {
243
+ _this.startNode.appendChild(brElm);
244
+ }
245
+ }
246
+ if (newElem.childNodes[0].textContent === '\n') {
247
+ detach(newElem.childNodes[0]);
248
+ }
249
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);
250
+ }
251
+ if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||
252
+ _this.parent.shiftEnterKey === 'P') && shiftKey_1)) {
253
+ var isHeadingTag = _this.formatTags.indexOf(newElem.nodeName.toLocaleLowerCase());
254
+ if ((isHeadingTag < 0) || (isHeadingTag >= 0 && newElem.textContent.trim().length === 0)) {
255
+ var insertElm = _this.createInsertElement(shiftKey_1);
256
+ while (newElem.firstChild) {
257
+ insertElm.appendChild(newElem.firstChild);
258
+ }
259
+ _this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);
260
+ detach(newElem);
261
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode) ?
262
+ insertElm : _this.startNode, 0);
263
+ }
215
264
  }
216
- _this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);
217
- detach(newElem);
218
- _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode) ?
219
- insertElm : _this.startNode, 0);
220
265
  }
221
266
  }
222
267
  e.args.preventDefault();
@@ -249,13 +294,18 @@ var EnterKeyAction = /** @class */ (function () {
249
294
  _this.range.startOffset === _this.range.endOffset &&
250
295
  _this.range.startOffset === isLastNodeLength) {
251
296
  var focusBRElem = _this.parent.createElement('br');
252
- if (currentParentLastChild.nodeName === 'BR' && currentParent.textContent.length === 0) {
253
- _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, currentParentLastChild);
297
+ if (_this.range.startOffset === 0 && _this.range.startContainer.nodeName === 'TABLE') {
298
+ _this.range.startContainer.parentElement.insertBefore(focusBRElem, _this.range.startContainer);
254
299
  }
255
300
  else {
256
- var lineBreakBRElem = _this.parent.createElement('br');
257
- _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, _this.range.startContainer);
258
- _this.parent.formatter.editorManager.domNode.insertAfter(lineBreakBRElem, _this.range.startContainer);
301
+ if (currentParentLastChild.nodeName === 'BR' && currentParent.textContent.length === 0) {
302
+ _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, currentParentLastChild);
303
+ }
304
+ else {
305
+ var lineBreakBRElem = _this.parent.createElement('br');
306
+ _this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, _this.range.startContainer);
307
+ _this.parent.formatter.editorManager.domNode.insertAfter(lineBreakBRElem, _this.range.startContainer);
308
+ }
259
309
  }
260
310
  _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusBRElem, 0);
261
311
  }
@@ -300,7 +350,7 @@ var EnterKeyAction = /** @class */ (function () {
300
350
  }
301
351
  };
302
352
  EnterKeyAction.prototype.removeBRElement = function (currentElement) {
303
- if (Browser.userAgent.indexOf('Firefox') != -1 &&
353
+ if (Browser.userAgent.indexOf('Firefox') !== -1 &&
304
354
  this.range.endOffset === currentElement.textContent.length && (currentElement.textContent.length !== 0 ||
305
355
  currentElement.querySelectorAll('BR').length > 1) &&
306
356
  !isNOU(currentElement.lastChild) && currentElement.lastChild.nodeName === 'BR') {
@@ -309,6 +359,10 @@ var EnterKeyAction = /** @class */ (function () {
309
359
  };
310
360
  EnterKeyAction.prototype.insertBRElement = function () {
311
361
  var isEmptyBrInserted = false;
362
+ var isFocusTextNode = true;
363
+ if (this.range.endContainer.textContent.length == 0 && this.range.startContainer.nodeName === "BR") {
364
+ isFocusTextNode = false;
365
+ }
312
366
  var brElm = this.parent.createElement('br');
313
367
  if (this.startNode.nodeName === 'BR' && this.endNode.nodeName === 'BR' && this.range.startOffset === 0 && this.range.startOffset === this.range.endOffset) {
314
368
  this.parent.formatter.editorManager.domNode.insertAfter(brElm, this.startNode);
@@ -322,7 +376,7 @@ var EnterKeyAction = /** @class */ (function () {
322
376
  this.range.insertNode(brElm);
323
377
  }
324
378
  if (isEmptyBrInserted || (!isNOU(brElm.nextElementSibling) && brElm.nextElementSibling.tagName === 'BR') || (!isNOU(brElm.nextSibling) && brElm.nextSibling.textContent.length > 0)) {
325
- this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), !isNOU(brElm.nextSibling) ? brElm.nextSibling : brElm, 0);
379
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), !isNOU(brElm.nextSibling) && isFocusTextNode ? brElm.nextSibling : brElm, 0);
326
380
  isEmptyBrInserted = false;
327
381
  }
328
382
  else {
@@ -42,6 +42,7 @@ export declare class HtmlEditor {
42
42
  private updateReadOnly;
43
43
  private onSelectionSave;
44
44
  private onSelectionRestore;
45
+ private isTableClassAdded;
45
46
  private onKeyUp;
46
47
  private onKeyDown;
47
48
  private isOrderedList;
@@ -69,6 +69,7 @@ var HtmlEditor = /** @class */ (function () {
69
69
  this.parent.on(events.selectionRestore, this.onSelectionRestore, this);
70
70
  this.parent.on(events.readOnlyMode, this.updateReadOnly, this);
71
71
  this.parent.on(events.paste, this.onPaste, this);
72
+ this.parent.on(events.tableclass, this.isTableClassAdded, this);
72
73
  };
73
74
  HtmlEditor.prototype.updateReadOnly = function () {
74
75
  if (this.parent.readonly) {
@@ -92,6 +93,14 @@ var HtmlEditor = /** @class */ (function () {
92
93
  this.saveSelection.restore();
93
94
  }
94
95
  };
96
+ HtmlEditor.prototype.isTableClassAdded = function () {
97
+ var tableElement = this.parent.inputElement.querySelectorAll('table');
98
+ for (var i = 0; i < tableElement.length; i++) {
99
+ if (!tableElement[i].classList.contains('e-rte-table')) {
100
+ tableElement[i].classList.add('e-rte-table');
101
+ }
102
+ }
103
+ };
95
104
  HtmlEditor.prototype.onKeyUp = function (e) {
96
105
  var args = e.args;
97
106
  var restrictKeys = [8, 9, 13, 16, 17, 18, 20, 27, 37, 38, 39, 40, 44, 45, 46, 91,
@@ -100,11 +109,39 @@ var HtmlEditor = /** @class */ (function () {
100
109
  var regEx = new RegExp(String.fromCharCode(8203), 'g');
101
110
  var pointer;
102
111
  if (restrictKeys.indexOf(args.keyCode) < 0 && !args.shiftKey && !args.ctrlKey && !args.altKey) {
112
+ pointer = range.startOffset;
113
+ range.startContainer.nodeName === '#text' ? range.startContainer.parentElement.classList.add('currentStartMark') : range.startContainer.classList.add('currentStartMark');
103
114
  if (range.startContainer.textContent.charCodeAt(0) === 8203) {
104
- pointer = range.startOffset - 1;
115
+ pointer = range.startOffset === 0 ? range.startOffset : range.startOffset - 1;
105
116
  range.startContainer.textContent = range.startContainer.textContent.replace(regEx, '');
106
117
  this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), range.startContainer, pointer);
107
118
  }
119
+ var previousLength = this.parent.inputElement.innerHTML.length;
120
+ var currentLength = this.parent.inputElement.innerHTML.replace(regEx, '').length;
121
+ if (previousLength > currentLength) {
122
+ var currentChild = this.parent.inputElement.firstChild;
123
+ while (!isNOU(currentChild) && currentChild.textContent.replace(regEx, '').trim().length > 0) {
124
+ currentChild.innerHTML = currentChild.innerHTML.replace(regEx, '');
125
+ currentChild = currentChild.nextElementSibling;
126
+ }
127
+ if (this.parent.inputElement.querySelector('.currentStartMark').childNodes.length > 1) {
128
+ var currentChild_1 = this.parent.inputElement.querySelector('.currentStartMark').childNodes;
129
+ for (var i = 0; i < currentChild_1.length; i++) {
130
+ if (currentChild_1[i].nodeName === '#text' && currentChild_1[i].textContent.length === 0) {
131
+ detach(currentChild_1[i]);
132
+ i--;
133
+ }
134
+ }
135
+ }
136
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), this.parent.inputElement.querySelector('.currentStartMark').childNodes[0], pointer);
137
+ }
138
+ var currentElem = this.parent.inputElement.querySelector('.currentStartMark');
139
+ if (!isNOU(currentElem)) {
140
+ currentElem.classList.remove('currentStartMark');
141
+ if (currentElem.getAttribute('class').trim() === '') {
142
+ currentElem.removeAttribute('class');
143
+ }
144
+ }
108
145
  if (!isNOU(range.startContainer.previousSibling) && !isNOU(range.startContainer.previousSibling.parentElement) &&
109
146
  range.startContainer.parentElement === range.startContainer.previousSibling.parentElement &&
110
147
  range.startContainer.previousSibling.textContent.charCodeAt(0) === 8203 &&
@@ -526,6 +563,16 @@ var HtmlEditor = /** @class */ (function () {
526
563
  member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
527
564
  });
528
565
  }
566
+ if (item.command === 'Audios') {
567
+ this.parent.notify(events.audioToolbarAction, {
568
+ member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
569
+ });
570
+ }
571
+ if (item.command === 'Videos') {
572
+ this.parent.notify(events.videoToolbarAction, {
573
+ member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
574
+ });
575
+ }
529
576
  if (item.command === 'Links') {
530
577
  this.parent.notify(events.linkToolbarAction, {
531
578
  member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
@@ -574,6 +621,16 @@ var HtmlEditor = /** @class */ (function () {
574
621
  member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
575
622
  });
576
623
  break;
624
+ case 'Audio':
625
+ this.parent.notify(events.insertAudio, {
626
+ member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
627
+ });
628
+ break;
629
+ case 'Video':
630
+ this.parent.notify(events.insertVideo, {
631
+ member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
632
+ });
633
+ break;
577
634
  case 'CreateTable':
578
635
  this.parent.notify(events.createTable, {
579
636
  member: 'table', args: args, selection: save
@@ -628,6 +685,7 @@ var HtmlEditor = /** @class */ (function () {
628
685
  this.parent.off(events.selectionRestore, this.onSelectionRestore);
629
686
  this.parent.off(events.readOnlyMode, this.updateReadOnly);
630
687
  this.parent.off(events.paste, this.onPaste);
688
+ this.parent.off(events.tableclass, this.isTableClassAdded);
631
689
  };
632
690
  HtmlEditor.prototype.render = function () {
633
691
  this.contentRenderer = this.renderFactory.getRenderer(RenderType.Content);
@@ -80,7 +80,8 @@ var PasteCleanup = /** @class */ (function () {
80
80
  var file = e && e.args.clipboardData &&
81
81
  e.args.clipboardData.items.length > 0 ?
82
82
  (e.args.clipboardData.items[0].getAsFile() === null ?
83
- (!isNOU(e.args.clipboardData.items[1]) ? e.args.clipboardData.items[1].getAsFile() : null) :
83
+ (!isNOU(e.args.clipboardData.items[1]) ?
84
+ e.args.clipboardData.items[1].getAsFile() : null) :
84
85
  e.args.clipboardData.items[0].getAsFile()) : null;
85
86
  this.parent.notify(events.paste, {
86
87
  file: file,
@@ -18,6 +18,8 @@ export declare class QuickToolbar {
18
18
  linkQTBar: BaseQuickToolbar;
19
19
  textQTBar: BaseQuickToolbar;
20
20
  imageQTBar: BaseQuickToolbar;
21
+ audioQTBar: BaseQuickToolbar;
22
+ videoQTBar: BaseQuickToolbar;
21
23
  tableQTBar: BaseQuickToolbar;
22
24
  inlineQTBar: BaseQuickToolbar;
23
25
  private renderFactory;