@syncfusion/ej2-richtexteditor 20.3.61 → 20.4.40

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 (101) hide show
  1. package/.eslintrc.json +16 -1
  2. package/CHANGELOG.md +4 -32
  3. package/README.md +53 -45
  4. package/dist/ej2-richtexteditor.min.js +2 -2
  5. package/dist/ej2-richtexteditor.umd.min.js +2 -2
  6. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es2015.js +332 -187
  8. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  9. package/dist/es6/ej2-richtexteditor.es5.js +320 -174
  10. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  11. package/dist/global/ej2-richtexteditor.min.js +2 -2
  12. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  13. package/dist/global/index.d.ts +1 -1
  14. package/package.json +16 -16
  15. package/src/editor-manager/plugin/clearformat.js +2 -1
  16. package/src/editor-manager/plugin/dom-node.js +1 -1
  17. package/src/editor-manager/plugin/formats.js +1 -0
  18. package/src/editor-manager/plugin/image.js +1 -0
  19. package/src/editor-manager/plugin/link.js +3 -1
  20. package/src/editor-manager/plugin/lists.js +15 -7
  21. package/src/editor-manager/plugin/ms-word-clean-up.js +6 -2
  22. package/src/editor-manager/plugin/selection-commands.js +8 -41
  23. package/src/editor-manager/plugin/table.js +6 -0
  24. package/src/editor-manager/plugin/toolbar-status.js +3 -0
  25. package/src/editor-manager/plugin/video.js +2 -2
  26. package/src/markdown-parser/plugin/clearformat.js +9 -7
  27. package/src/markdown-parser/plugin/formats.js +6 -5
  28. package/src/markdown-parser/plugin/lists.js +5 -0
  29. package/src/markdown-parser/plugin/markdown-selection.js +3 -0
  30. package/src/markdown-parser/plugin/md-selection-formats.js +13 -10
  31. package/src/rich-text-editor/actions/enter-key.js +66 -15
  32. package/src/rich-text-editor/actions/file-manager.js +1 -0
  33. package/src/rich-text-editor/actions/full-screen.js +1 -0
  34. package/src/rich-text-editor/actions/html-attributes.js +8 -8
  35. package/src/rich-text-editor/actions/html-editor.js +18 -6
  36. package/src/rich-text-editor/actions/keyboard.js +4 -4
  37. package/src/rich-text-editor/actions/markdown-toolbar-status.js +2 -1
  38. package/src/rich-text-editor/actions/paste-clean-up.js +2 -1
  39. package/src/rich-text-editor/actions/toolbar.js +6 -1
  40. package/src/rich-text-editor/base/constant.d.ts +8 -8
  41. package/src/rich-text-editor/base/constant.js +8 -8
  42. package/src/rich-text-editor/base/rich-text-editor.d.ts +2 -0
  43. package/src/rich-text-editor/base/rich-text-editor.js +43 -10
  44. package/src/rich-text-editor/base/util.js +9 -9
  45. package/src/rich-text-editor/renderer/audio-module.d.ts +1 -1
  46. package/src/rich-text-editor/renderer/audio-module.js +7 -5
  47. package/src/rich-text-editor/renderer/image-module.js +10 -6
  48. package/src/rich-text-editor/renderer/link-module.js +5 -4
  49. package/src/rich-text-editor/renderer/table-module.js +19 -5
  50. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +1 -0
  51. package/src/rich-text-editor/renderer/toolbar-renderer.js +1 -0
  52. package/src/rich-text-editor/renderer/video-module.d.ts +1 -1
  53. package/src/rich-text-editor/renderer/video-module.js +13 -4
  54. package/src/rich-text-editor/services/renderer-factory.js +4 -4
  55. package/src/rich-text-editor/services/service-locator.js +4 -4
  56. package/src/selection/selection.js +2 -0
  57. package/styles/bootstrap-dark.css +12 -5
  58. package/styles/bootstrap.css +12 -5
  59. package/styles/bootstrap4.css +12 -5
  60. package/styles/bootstrap5-dark.css +12 -5
  61. package/styles/bootstrap5.css +12 -5
  62. package/styles/fabric-dark.css +12 -5
  63. package/styles/fabric.css +12 -5
  64. package/styles/fluent-dark.css +12 -5
  65. package/styles/fluent.css +12 -5
  66. package/styles/highcontrast-light.css +12 -5
  67. package/styles/highcontrast.css +12 -5
  68. package/styles/material-dark.css +12 -5
  69. package/styles/material.css +12 -5
  70. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +1 -0
  71. package/styles/rich-text-editor/_bootstrap-definition.scss +1 -0
  72. package/styles/rich-text-editor/_bootstrap4-definition.scss +1 -0
  73. package/styles/rich-text-editor/_bootstrap5-definition.scss +1 -0
  74. package/styles/rich-text-editor/_fabric-dark-definition.scss +1 -0
  75. package/styles/rich-text-editor/_fabric-definition.scss +1 -0
  76. package/styles/rich-text-editor/_fluent-definition.scss +1 -0
  77. package/styles/rich-text-editor/_fusionnew-definition.scss +1 -0
  78. package/styles/rich-text-editor/_highcontrast-definition.scss +1 -0
  79. package/styles/rich-text-editor/_highcontrast-light-definition.scss +1 -0
  80. package/styles/rich-text-editor/_material-dark-definition.scss +1 -0
  81. package/styles/rich-text-editor/_material-definition.scss +1 -0
  82. package/styles/rich-text-editor/_material3-definition.scss +1 -0
  83. package/styles/rich-text-editor/_tailwind-definition.scss +1 -0
  84. package/styles/rich-text-editor/_theme.scss +11 -6
  85. package/styles/rich-text-editor/bootstrap-dark.css +12 -5
  86. package/styles/rich-text-editor/bootstrap.css +12 -5
  87. package/styles/rich-text-editor/bootstrap4.css +12 -5
  88. package/styles/rich-text-editor/bootstrap5-dark.css +12 -5
  89. package/styles/rich-text-editor/bootstrap5.css +12 -5
  90. package/styles/rich-text-editor/fabric-dark.css +12 -5
  91. package/styles/rich-text-editor/fabric.css +12 -5
  92. package/styles/rich-text-editor/fluent-dark.css +12 -5
  93. package/styles/rich-text-editor/fluent.css +12 -5
  94. package/styles/rich-text-editor/highcontrast-light.css +12 -5
  95. package/styles/rich-text-editor/highcontrast.css +12 -5
  96. package/styles/rich-text-editor/material-dark.css +12 -5
  97. package/styles/rich-text-editor/material.css +12 -5
  98. package/styles/rich-text-editor/tailwind-dark.css +12 -5
  99. package/styles/rich-text-editor/tailwind.css +12 -5
  100. package/styles/tailwind-dark.css +12 -5
  101. package/styles/tailwind.css +12 -5
@@ -41,8 +41,8 @@ var EnterKeyAction = /** @class */ (function () {
41
41
  var curElement = this.startNode;
42
42
  var blockElement = curElement;
43
43
  while (!this.parent.formatter.editorManager.domNode.isBlockNode(curElement)) {
44
- blockElement = curElement;
45
44
  curElement = curElement.parentElement;
45
+ blockElement = curElement;
46
46
  }
47
47
  isTableEnter = blockElement.tagName === 'TD' || blockElement.tagName === 'TBODY' ? false : true;
48
48
  }
@@ -59,7 +59,10 @@ var EnterKeyAction = /** @class */ (function () {
59
59
  this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {
60
60
  if (!actionBeginArgs.cancel) {
61
61
  if (!(_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.range.endContainer)) {
62
- _this.range.deleteContents();
62
+ if (!(_this.range.startContainer.nodeName === 'SPAN' && (_this.range.startContainer.classList.contains('e-video-wrap') ||
63
+ _this.range.startContainer.classList.contains('e-audio-wrap')))) {
64
+ _this.range.deleteContents();
65
+ }
63
66
  if (_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.length === 0 &&
64
67
  _this.range.startContainer.parentElement !== _this.parent.inputElement) {
65
68
  if (_this.parent.enterKey === 'BR') {
@@ -88,8 +91,8 @@ var EnterKeyAction = /** @class */ (function () {
88
91
  while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' && currentFocusElem.nodeName !== 'BR') {
89
92
  currentFocusElem = currentFocusElem.lastChild;
90
93
  }
91
- if (currentFocusElem.nodeName != 'BR' && currentFocusElem.parentElement.textContent.length === 0 && currentFocusElem.parentElement.innerHTML.length === 0 &&
92
- currentFocusElem.parentElement.nodeName != 'BR') {
94
+ if (currentFocusElem.nodeName !== 'BR' && currentFocusElem.parentElement.textContent.length === 0 && currentFocusElem.parentElement.innerHTML.length === 0 &&
95
+ currentFocusElem.parentElement.nodeName !== 'BR') {
93
96
  currentFocusElem.parentElement.appendChild(_this.parent.createElement('BR'));
94
97
  }
95
98
  _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);
@@ -141,13 +144,14 @@ var EnterKeyAction = /** @class */ (function () {
141
144
  else {
142
145
  nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);
143
146
  }
144
- var isImageNode = false;
147
+ var isMediaNode = false; // To check the image audio and video node cases
145
148
  var isFocusedFirst = false;
146
149
  if (_this.range.startOffset !== 0 && _this.range.endOffset !== 0 &&
147
150
  _this.range.startContainer === _this.range.endContainer && !(!isNOU(nearBlockNode.childNodes[0])
148
- && nearBlockNode.childNodes[0].nodeName === 'IMG')) {
151
+ && nearBlockNode.childNodes[0].nodeName === 'IMG' && nearBlockNode.querySelectorAll('img,audio,video').length > 0)) {
149
152
  var startNodeText = _this.range.startContainer.textContent;
150
153
  var splitFirstText = startNodeText.substring(0, _this.range.startOffset);
154
+ // eslint-disable-next-line max-len
151
155
  if (splitFirstText.charCodeAt(_this.range.startOffset - 1) !== 160 && splitFirstText.trim().length === 0) {
152
156
  isFocusedFirst = true;
153
157
  }
@@ -159,26 +163,29 @@ var EnterKeyAction = /** @class */ (function () {
159
163
  var fireFoxEnterAtMiddle = Browser.userAgent.indexOf('Firefox') !== -1 && _this.range.startOffset === 0 && _this.range.startContainer === _this.range.endContainer &&
160
164
  _this.range.startContainer.nodeName === '#text' && !_this.parent.formatter.editorManager.domNode.isBlockNode(_this.range.startContainer.previousSibling) &&
161
165
  _this.range.startContainer.parentElement === _this.range.startContainer.previousSibling.parentElement;
166
+ // eslint-disable-next-line max-len
162
167
  if (!fireFoxEnterAtMiddle && ((_this.range.startOffset === 0 && _this.range.endOffset === 0) || isFocusedFirst) &&
163
168
  !(!isNOU(_this.range.startContainer.previousSibling) &&
164
169
  (_this.range.startContainer.previousSibling.nodeName === 'IMG' || _this.range.startContainer.previousSibling.nodeName === 'BR'))) {
165
170
  var isNearBlockLengthZero = void 0;
166
171
  var newElem = void 0;
167
- if (_this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.nodeName === 'TABLE') {
172
+ if (!isNOU(_this.range.startContainer.childNodes) && _this.range.startContainer.textContent.length === 0 &&
173
+ (_this.range.startContainer.querySelectorAll('img,audio,video').length > 0 ||
174
+ _this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.nodeName === 'TABLE')) {
168
175
  newElem = _this.createInsertElement(shiftKey_1);
169
- isImageNode = true;
176
+ isMediaNode = true;
170
177
  isNearBlockLengthZero = false;
171
178
  }
172
179
  else {
173
180
  if ((nearBlockNode.textContent.trim().length !== 0 ||
174
181
  nearBlockNode.childNodes[0].nodeName === 'IMG' ||
175
- (nearBlockNode.textContent.trim() === '' && nearBlockNode.querySelectorAll('img').length > 0))) {
176
- if ((_this.range.startOffset === _this.range.endOffset && _this.range.startOffset != 0)) {
182
+ (nearBlockNode.textContent.trim() === '' && nearBlockNode.querySelectorAll('img,audio,video').length > 0))) {
183
+ if ((_this.range.startOffset === _this.range.endOffset && _this.range.startOffset !== 0)) {
177
184
  newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
178
185
  }
179
186
  else {
180
187
  newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
181
- isImageNode = true;
188
+ isMediaNode = true;
182
189
  }
183
190
  isNearBlockLengthZero = false;
184
191
  }
@@ -201,7 +208,7 @@ var EnterKeyAction = /** @class */ (function () {
201
208
  if (!isNearBlockLengthZero) {
202
209
  var currentFocusElem = insertElem;
203
210
  var finalFocusElem = void 0;
204
- if (_this.range.startOffset === _this.range.endOffset && _this.range.startOffset != 0) {
211
+ if (_this.range.startOffset === _this.range.endOffset && _this.range.startOffset !== 0) {
205
212
  while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' &&
206
213
  currentFocusElem.nodeName !== 'BR') {
207
214
  finalFocusElem = currentFocusElem;
@@ -212,7 +219,7 @@ var EnterKeyAction = /** @class */ (function () {
212
219
  finalFocusElem = currentFocusElem;
213
220
  }
214
221
  finalFocusElem.innerHTML = '<br>';
215
- if (!isImageNode) {
222
+ if (!isMediaNode) {
216
223
  detach(nearBlockNode);
217
224
  }
218
225
  }
@@ -231,6 +238,48 @@ var EnterKeyAction = /** @class */ (function () {
231
238
  _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);
232
239
  }
233
240
  }
241
+ else if (_this.range.startContainer === _this.range.endContainer && _this.range.startContainer.nodeName === 'SPAN' &&
242
+ (_this.range.startContainer.classList.contains('e-video-wrap') ||
243
+ _this.range.startContainer.classList.contains('e-audio-wrap'))) {
244
+ if (nearBlockNode.textContent.trim().length > 0) {
245
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
246
+ var audioVideoElem = !isNOU(newElem.previousSibling.querySelector('.e-video-wrap')) ?
247
+ newElem.previousSibling.querySelector('.e-video-wrap') : newElem.previousSibling.querySelector('.e-audio-wrap');
248
+ var isBRInserted = false;
249
+ var lastNode = audioVideoElem.previousSibling;
250
+ while (!isNOU(lastNode) && lastNode.nodeName !== '#text') {
251
+ lastNode = lastNode.lastChild;
252
+ }
253
+ if (isNOU(lastNode)) {
254
+ var brElm = _this.parent.createElement('br');
255
+ audioVideoElem.parentElement.appendChild(brElm);
256
+ isBRInserted = true;
257
+ }
258
+ if (isBRInserted) {
259
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), audioVideoElem.parentElement, 0);
260
+ }
261
+ else {
262
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), lastNode, lastNode.textContent.length);
263
+ }
264
+ detach(audioVideoElem);
265
+ }
266
+ else {
267
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
268
+ var focusElem = newElem.previousSibling;
269
+ while (!isNOU(focusElem.firstChild)) {
270
+ detach(focusElem.firstChild);
271
+ }
272
+ var brElm = _this.parent.createElement('br');
273
+ focusElem.appendChild(brElm);
274
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);
275
+ }
276
+ if (!isNOU(_this.parent.audioModule)) {
277
+ _this.parent.audioModule.hideAudioQuickToolbar();
278
+ }
279
+ if (!isNOU(_this.parent.videoModule)) {
280
+ _this.parent.videoModule.hideVideoQuickToolbar();
281
+ }
282
+ }
234
283
  else {
235
284
  var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
236
285
  if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&
@@ -246,7 +295,7 @@ var EnterKeyAction = /** @class */ (function () {
246
295
  _this.startNode = startParentElem;
247
296
  }
248
297
  else {
249
- if (_this.startNode.nodeName != 'BR') {
298
+ if (_this.startNode.nodeName !== 'BR') {
250
299
  _this.startNode.appendChild(brElm);
251
300
  }
252
301
  }
@@ -330,6 +379,7 @@ var EnterKeyAction = /** @class */ (function () {
330
379
  var outerBRElem = _this.parent.createElement('br');
331
380
  if (_this.range.startOffset === 0 && _this.range.endOffset === 0 &&
332
381
  !isNOU(currentParent.previousSibling) && currentParent.previousSibling.nodeName === 'BR') {
382
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
333
383
  newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, false).cloneNode(true);
334
384
  _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);
335
385
  _this.insertFocusContent();
@@ -338,6 +388,7 @@ var EnterKeyAction = /** @class */ (function () {
338
388
  currentFocusElem = currentFocusElem.lastChild;
339
389
  }
340
390
  _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, 0);
391
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
341
392
  isEmptyBrInserted = true;
342
393
  }
343
394
  else {
@@ -367,7 +418,7 @@ var EnterKeyAction = /** @class */ (function () {
367
418
  EnterKeyAction.prototype.insertBRElement = function () {
368
419
  var isEmptyBrInserted = false;
369
420
  var isFocusTextNode = true;
370
- if (this.range.endContainer.textContent.length == 0 && this.range.startContainer.nodeName === "BR") {
421
+ if (this.range.endContainer.textContent.length === 0 && this.range.startContainer.nodeName === 'BR') {
371
422
  isFocusTextNode = false;
372
423
  }
373
424
  var brElm = this.parent.createElement('br');
@@ -80,6 +80,7 @@ var FileManager = /** @class */ (function () {
80
80
  this.dialogObj.show(Browser.isDevice ? true : false);
81
81
  this.setCssClass({ cssClass: this.parent.cssClass });
82
82
  };
83
+ // eslint-disable-next-line @typescript-eslint/tslint/config
83
84
  FileManager.prototype.setCssClass = function (e) {
84
85
  if (this.dialogObj && e.cssClass) {
85
86
  if (isNullOrUndefined(e.oldCssClass)) {
@@ -106,6 +106,7 @@ var FullScreen = /** @class */ (function () {
106
106
  _this.parent.toolbarModule.addFixedTBarClass();
107
107
  }
108
108
  }
109
+ _this.parent.refreshUI();
109
110
  _this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });
110
111
  }
111
112
  });
@@ -19,33 +19,33 @@ export function setAttributes(htmlAttributes, rte, isFrame, initial) {
19
19
  for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {
20
20
  var htmlAttr = _a[_i];
21
21
  if (htmlAttr === 'class') {
22
- target.classList.add(htmlAttributes[htmlAttr]);
22
+ target.classList.add(htmlAttributes["" + htmlAttr]);
23
23
  }
24
- else if (htmlAttr === 'disabled' && htmlAttributes[htmlAttr] === 'disabled') {
24
+ else if (htmlAttr === 'disabled' && htmlAttributes["" + htmlAttr] === 'disabled') {
25
25
  rte.enabled = false;
26
26
  rte.setEnable();
27
27
  }
28
- else if (htmlAttr === 'readonly' && htmlAttributes[htmlAttr] === 'readonly') {
28
+ else if (htmlAttr === 'readonly' && htmlAttributes["" + htmlAttr] === 'readonly') {
29
29
  rte.readonly = true;
30
30
  rte.setReadOnly(initial);
31
31
  }
32
32
  else if (htmlAttr === 'style') {
33
- target.setAttribute('style', htmlAttributes[htmlAttr]);
33
+ target.setAttribute('style', htmlAttributes["" + htmlAttr]);
34
34
  }
35
35
  else if (htmlAttr === 'tabindex') {
36
- rte.inputElement.setAttribute('tabindex', htmlAttributes[htmlAttr]);
36
+ rte.inputElement.setAttribute('tabindex', htmlAttributes["" + htmlAttr]);
37
37
  }
38
38
  else if (htmlAttr === 'placeholder') {
39
- rte.placeholder = htmlAttributes[htmlAttr];
39
+ rte.placeholder = htmlAttributes["" + htmlAttr];
40
40
  rte.setPlaceHolder();
41
41
  }
42
42
  else {
43
43
  var validateAttr = ['name', 'required'];
44
44
  if (validateAttr.indexOf(htmlAttr) > -1) {
45
- rte.valueContainer.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);
45
+ rte.valueContainer.setAttribute(htmlAttr, htmlAttributes["" + htmlAttr]);
46
46
  }
47
47
  else {
48
- target.setAttribute(htmlAttr, htmlAttributes[htmlAttr]);
48
+ target.setAttribute(htmlAttr, htmlAttributes["" + htmlAttr]);
49
49
  }
50
50
  }
51
51
  }
@@ -106,10 +106,12 @@ var HtmlEditor = /** @class */ (function () {
106
106
  var restrictKeys = [8, 9, 13, 16, 17, 18, 20, 27, 37, 38, 39, 40, 44, 45, 46, 91,
107
107
  112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123];
108
108
  var range = this.parent.getRange();
109
+ // eslint-disable-next-line
109
110
  var regEx = new RegExp(String.fromCharCode(8203), 'g');
110
111
  var pointer;
111
112
  if (restrictKeys.indexOf(args.keyCode) < 0 && !args.shiftKey && !args.ctrlKey && !args.altKey) {
112
113
  pointer = range.startOffset;
114
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
113
115
  range.startContainer.nodeName === '#text' ? range.startContainer.parentElement.classList.add('currentStartMark') : range.startContainer.classList.add('currentStartMark');
114
116
  if (range.startContainer.textContent.charCodeAt(0) === 8203) {
115
117
  pointer = range.startOffset === 0 ? range.startOffset : range.startOffset - 1;
@@ -118,22 +120,32 @@ var HtmlEditor = /** @class */ (function () {
118
120
  }
119
121
  var previousLength = this.parent.inputElement.innerHTML.length;
120
122
  var currentLength = this.parent.inputElement.innerHTML.replace(regEx, '').length;
123
+ var focusNode = range.startContainer;
121
124
  if (previousLength > currentLength) {
122
125
  var currentChild = this.parent.inputElement.firstChild;
123
126
  while (!isNOU(currentChild) && currentChild.textContent.replace(regEx, '').trim().length > 0) {
124
127
  currentChild.innerHTML = currentChild.innerHTML.replace(regEx, '');
125
128
  currentChild = currentChild.nextElementSibling;
126
129
  }
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]);
130
+ var currentChildNode = this.parent.inputElement.querySelector('.currentStartMark').childNodes;
131
+ if (currentChildNode.length > 1) {
132
+ for (var i = 0; i < currentChildNode.length; i++) {
133
+ if (currentChildNode[i].nodeName === '#text' && currentChildNode[i].textContent.length === 0) {
134
+ detach(currentChildNode[i]);
132
135
  i--;
133
136
  }
137
+ if (focusNode.textContent.replace(regEx, '') === currentChildNode[i].textContent) {
138
+ pointer = focusNode.textContent.length > 1 ? focusNode.textContent.length - 1 : focusNode.textContent.length;
139
+ focusNode = currentChildNode[i];
140
+ }
141
+ }
142
+ }
143
+ else if (currentChildNode.length === 1) {
144
+ if (focusNode.textContent.replace(regEx, '') === currentChildNode[0].textContent) {
145
+ focusNode = currentChildNode[0];
134
146
  }
135
147
  }
136
- this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), this.parent.inputElement.querySelector('.currentStartMark').childNodes[0], pointer);
148
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), focusNode, pointer);
137
149
  }
138
150
  var currentElem = this.parent.inputElement.querySelector('.currentStartMark');
139
151
  if (!isNOU(currentElem)) {
@@ -113,7 +113,7 @@ var KeyboardEvents = /** @class */ (function (_super) {
113
113
  var keys = Object.keys(_this.keyConfigs);
114
114
  for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
115
115
  var key = keys_1[_i];
116
- var configCollection = _this.keyConfigs[key].split(',');
116
+ var configCollection = _this.keyConfigs["" + key].split(',');
117
117
  for (var _a = 0, configCollection_1 = configCollection; _a < configCollection_1.length; _a++) {
118
118
  var rconfig = configCollection_1[_a];
119
119
  var rKeyObj = KeyboardEvents_1.getKeyConfigData(rconfig.trim());
@@ -187,7 +187,7 @@ var KeyboardEvents = /** @class */ (function (_super) {
187
187
  */
188
188
  KeyboardEvents.getKeyConfigData = function (config) {
189
189
  if (config in this.configCache) {
190
- return this.configCache[config];
190
+ return this.configCache["" + config];
191
191
  }
192
192
  var keys = config.toLowerCase().split('+');
193
193
  var keyData = {
@@ -202,12 +202,12 @@ var KeyboardEvents = /** @class */ (function (_super) {
202
202
  else {
203
203
  keyData.keyCode = KeyboardEvents_1.getKeyCode(keys[keys.length - 1]);
204
204
  }
205
- KeyboardEvents_1.configCache[config] = keyData;
205
+ KeyboardEvents_1.configCache["" + config] = keyData;
206
206
  return keyData;
207
207
  };
208
208
  // Return the keycode value as string
209
209
  KeyboardEvents.getKeyCode = function (keyVal) {
210
- return keyCode[keyVal] || keyVal.toUpperCase().charCodeAt(0);
210
+ return keyCode["" + keyVal] || keyVal.toUpperCase().charCodeAt(0);
211
211
  };
212
212
  var KeyboardEvents_1;
213
213
  KeyboardEvents.configCache = {};
@@ -58,7 +58,7 @@ var MarkdownToolbarStatus = /** @class */ (function () {
58
58
  }
59
59
  else {
60
60
  for (var i = 0; i < lines.length; i++) {
61
- if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags[type])) {
61
+ if (!this.selection.isStartWith(lines[i].text, this.parent.formatter.listTags["" + type])) {
62
62
  isApply = false;
63
63
  break;
64
64
  }
@@ -118,6 +118,7 @@ var MarkdownToolbarStatus = /** @class */ (function () {
118
118
  return text.search('\\' + cmd + '') !== -1;
119
119
  };
120
120
  MarkdownToolbarStatus.prototype.multiCharRegx = function (cmd) {
121
+ // eslint-disable-next-line
121
122
  return new RegExp('(\\' + cmd + ')', 'g');
122
123
  };
123
124
  return MarkdownToolbarStatus;
@@ -569,6 +569,7 @@ var PasteCleanup = /** @class */ (function () {
569
569
  }
570
570
  }
571
571
  };
572
+ // eslint-disable-next-line @typescript-eslint/tslint/config
572
573
  PasteCleanup.prototype.setCssClass = function (e) {
573
574
  if (this.popupObj && e.cssClass) {
574
575
  if (isNullOrUndefined(e.oldCssClass)) {
@@ -820,7 +821,7 @@ var PasteCleanup = /** @class */ (function () {
820
821
  var groupingTags = deniedTags.slice();
821
822
  var keys = Object.keys(pasteCleanupGroupingTags);
822
823
  var values = keys.map(function (key) {
823
- return pasteCleanupGroupingTags[key];
824
+ return pasteCleanupGroupingTags["" + key];
824
825
  });
825
826
  var addTags = [];
826
827
  for (var i = 0; i < groupingTags.length; i++) {
@@ -4,7 +4,7 @@ import { setStyleAttribute, extend } from '@syncfusion/ej2-base';
4
4
  import * as events from '../base/constant';
5
5
  import * as classes from '../base/classes';
6
6
  import { RenderType, ToolbarType } from '../base/enum';
7
- import { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection, toObjectLowerCase, isIDevice } from '../base/util';
7
+ import { setToolbarStatus, updateUndoRedoStatus, getTBarItemsIndex, getCollection, toObjectLowerCase, isIDevice, getTooltipText } from '../base/util';
8
8
  import { updateDropDownFontFormatLocale } from '../base/util';
9
9
  import * as model from '../models/items';
10
10
  import { ToolbarRenderer } from '../renderer/toolbar-renderer';
@@ -134,6 +134,7 @@ var Toolbar = /** @class */ (function () {
134
134
  this.isTransformChild = false;
135
135
  var transformElements = selectAll('[style*="transform"]', document);
136
136
  for (var i = 0; i < transformElements.length; i++) {
137
+ // eslint-disable-next-line max-len
137
138
  if (!isNullOrUndefined(transformElements[i].contains) && transformElements[i].contains(this.parent.element)) {
138
139
  this.isTransformChild = true;
139
140
  break;
@@ -305,6 +306,9 @@ var Toolbar = /** @class */ (function () {
305
306
  */
306
307
  Toolbar.prototype.updateItem = function (args) {
307
308
  var item = this.tools[args.updateItem.toLocaleLowerCase()];
309
+ if (this.parent.locale !== 'en-US') {
310
+ item.tooltip = getTooltipText(args.updateItem.toLocaleLowerCase(), this.locator);
311
+ }
308
312
  var trgItem = this.tools[args.targetItem.toLocaleLowerCase()];
309
313
  var index = getTBarItemsIndex(getCollection(trgItem.subCommand), args.baseToolbar.toolbarObj.items)[0];
310
314
  if (!isNOU(index)) {
@@ -632,6 +636,7 @@ var Toolbar = /** @class */ (function () {
632
636
  this.parent.off(events.toolbarClick, this.toolbarClickHandler);
633
637
  }
634
638
  };
639
+ // eslint-disable-next-line @typescript-eslint/tslint/config
635
640
  Toolbar.prototype.setCssClass = function (e) {
636
641
  if (this.toolbarObj && e.cssClass) {
637
642
  if (isNullOrUndefined(e.oldCssClass)) {
@@ -572,24 +572,24 @@ export declare const imageRemoving: string;
572
572
  */
573
573
  export declare const fileSelected: string;
574
574
  /**
575
- * @hidden
575
+ * @hidden
576
576
 
577
- */
577
+ */
578
578
  export declare const fileUploading: string;
579
579
  /**
580
- * @hidden
580
+ * @hidden
581
581
 
582
- */
582
+ */
583
583
  export declare const fileUploadSuccess: string;
584
584
  /**
585
- * @hidden
585
+ * @hidden
586
586
 
587
- */
587
+ */
588
588
  export declare const fileUploadFailed: string;
589
589
  /**
590
- * @hidden
590
+ * @hidden
591
591
 
592
- */
592
+ */
593
593
  export declare const fileRemoving: string;
594
594
  /**
595
595
  * @hidden
@@ -572,24 +572,24 @@ export var imageRemoving = 'imageRemoving';
572
572
  */
573
573
  export var fileSelected = 'fileSelected';
574
574
  /**
575
- * @hidden
575
+ * @hidden
576
576
 
577
- */
577
+ */
578
578
  export var fileUploading = 'fileUploading';
579
579
  /**
580
- * @hidden
580
+ * @hidden
581
581
 
582
- */
582
+ */
583
583
  export var fileUploadSuccess = 'fileUploadSuccess';
584
584
  /**
585
- * @hidden
585
+ * @hidden
586
586
 
587
- */
587
+ */
588
588
  export var fileUploadFailed = 'fileUploadFailed';
589
589
  /**
590
- * @hidden
590
+ * @hidden
591
591
 
592
- */
592
+ */
593
593
  export var fileRemoving = 'fileRemoving';
594
594
  /**
595
595
  * @hidden
@@ -55,6 +55,7 @@ export declare class RichTextEditor extends Component<HTMLElement> implements IN
55
55
  private defaultResetValue;
56
56
  private isResizeInitialized;
57
57
  private isValueChangeBlurhandler;
58
+ private displayTempElem;
58
59
  /**
59
60
  * @hidden
60
61
 
@@ -1404,6 +1405,7 @@ export declare class RichTextEditor extends Component<HTMLElement> implements IN
1404
1405
  private createScriptElement;
1405
1406
  private createStyleElement;
1406
1407
  private setValue;
1408
+ renderTemplates(callBack: any): void;
1407
1409
  private updateResizeFlag;
1408
1410
  /**
1409
1411
  * Image max width calculation method