@syncfusion/ej2-richtexteditor 19.2.62 → 19.3.43

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 (113) hide show
  1. package/.eslintrc.json +1 -1
  2. package/CHANGELOG.md +21 -9
  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 +858 -245
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +864 -243
  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 +12 -12
  13. package/src/common/types.d.ts +8 -0
  14. package/src/editor-manager/base/editor-manager.d.ts +1 -1
  15. package/src/editor-manager/base/editor-manager.js +6 -6
  16. package/src/editor-manager/base/interface.d.ts +7 -1
  17. package/src/editor-manager/plugin/clearformat-exec.js +2 -2
  18. package/src/editor-manager/plugin/clearformat.d.ts +3 -1
  19. package/src/editor-manager/plugin/clearformat.js +19 -9
  20. package/src/editor-manager/plugin/dom-node.js +2 -2
  21. package/src/editor-manager/plugin/formats.d.ts +1 -0
  22. package/src/editor-manager/plugin/formats.js +87 -7
  23. package/src/editor-manager/plugin/image.js +55 -47
  24. package/src/editor-manager/plugin/inserthtml.js +10 -2
  25. package/src/editor-manager/plugin/isformatted.js +2 -1
  26. package/src/editor-manager/plugin/lists.d.ts +1 -0
  27. package/src/editor-manager/plugin/lists.js +87 -8
  28. package/src/editor-manager/plugin/nodecutter.d.ts +1 -0
  29. package/src/editor-manager/plugin/nodecutter.js +1 -0
  30. package/src/editor-manager/plugin/selection-commands.d.ts +2 -1
  31. package/src/editor-manager/plugin/selection-commands.js +14 -6
  32. package/src/editor-manager/plugin/selection-exec.js +2 -2
  33. package/src/editor-manager/plugin/table.js +19 -9
  34. package/src/rich-text-editor/actions/base-quick-toolbar.js +3 -4
  35. package/src/rich-text-editor/actions/enter-key.d.ts +18 -0
  36. package/src/rich-text-editor/actions/enter-key.js +290 -0
  37. package/src/rich-text-editor/actions/html-editor.js +30 -20
  38. package/src/rich-text-editor/actions/paste-clean-up.js +5 -5
  39. package/src/rich-text-editor/actions/resize.js +4 -4
  40. package/src/rich-text-editor/base/constant.d.ts +5 -0
  41. package/src/rich-text-editor/base/constant.js +5 -0
  42. package/src/rich-text-editor/base/interface.d.ts +15 -3
  43. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +27 -1
  44. package/src/rich-text-editor/base/rich-text-editor.d.ts +34 -5
  45. package/src/rich-text-editor/base/rich-text-editor.js +58 -56
  46. package/src/rich-text-editor/base/util.d.ts +7 -1
  47. package/src/rich-text-editor/base/util.js +45 -11
  48. package/src/rich-text-editor/formatter/formatter.js +9 -7
  49. package/src/rich-text-editor/models/items.js +3 -3
  50. package/src/rich-text-editor/renderer/iframe-content-renderer.js +2 -2
  51. package/src/rich-text-editor/renderer/image-module.d.ts +6 -0
  52. package/src/rich-text-editor/renderer/image-module.js +70 -26
  53. package/src/rich-text-editor/renderer/link-module.js +4 -3
  54. package/src/rich-text-editor/renderer/popup-renderer.js +1 -2
  55. package/src/rich-text-editor/renderer/render.js +10 -2
  56. package/src/rich-text-editor/renderer/table-module.js +13 -5
  57. package/src/rich-text-editor/renderer/view-source.js +21 -3
  58. package/styles/bootstrap-dark.css +25 -12
  59. package/styles/bootstrap.css +25 -12
  60. package/styles/bootstrap4.css +21 -13
  61. package/styles/bootstrap5-dark.css +3058 -0
  62. package/styles/bootstrap5-dark.scss +1 -0
  63. package/styles/bootstrap5.css +3058 -0
  64. package/styles/bootstrap5.scss +1 -0
  65. package/styles/fabric-dark.css +20 -12
  66. package/styles/fabric.css +20 -12
  67. package/styles/highcontrast-light.css +20 -12
  68. package/styles/highcontrast.css +19 -18
  69. package/styles/material-dark.css +22 -14
  70. package/styles/material.css +19 -11
  71. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +1 -1
  72. package/styles/rich-text-editor/_bootstrap-definition.scss +1 -1
  73. package/styles/rich-text-editor/_bootstrap4-definition.scss +2 -2
  74. package/styles/rich-text-editor/_bootstrap5-dark-definition.scss +1 -0
  75. package/styles/rich-text-editor/_bootstrap5-definition.scss +168 -0
  76. package/styles/rich-text-editor/_fabric-dark-definition.scss +1 -1
  77. package/styles/rich-text-editor/_fabric-definition.scss +1 -1
  78. package/styles/rich-text-editor/_highcontrast-definition.scss +2 -2
  79. package/styles/rich-text-editor/_highcontrast-light-definition.scss +1 -1
  80. package/styles/rich-text-editor/_layout.scss +64 -7
  81. package/styles/rich-text-editor/_tailwind-dark-definition.scss +1 -165
  82. package/styles/rich-text-editor/_tailwind-definition.scss +74 -72
  83. package/styles/rich-text-editor/_theme.scss +103 -3
  84. package/styles/rich-text-editor/bootstrap-dark.css +25 -12
  85. package/styles/rich-text-editor/bootstrap.css +25 -12
  86. package/styles/rich-text-editor/bootstrap4.css +21 -13
  87. package/styles/rich-text-editor/bootstrap5-dark.css +3058 -0
  88. package/styles/rich-text-editor/bootstrap5-dark.scss +4 -0
  89. package/styles/rich-text-editor/bootstrap5.css +3058 -0
  90. package/styles/rich-text-editor/bootstrap5.scss +4 -0
  91. package/styles/rich-text-editor/fabric-dark.css +20 -12
  92. package/styles/rich-text-editor/fabric.css +20 -12
  93. package/styles/rich-text-editor/highcontrast-light.css +20 -12
  94. package/styles/rich-text-editor/highcontrast.css +19 -18
  95. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +1 -1
  96. package/styles/rich-text-editor/icons/_bootstrap.scss +1 -1
  97. package/styles/rich-text-editor/icons/_bootstrap4.scss +1 -1
  98. package/styles/rich-text-editor/icons/_bootstrap5-dark.scss +1 -0
  99. package/styles/rich-text-editor/icons/_bootstrap5.scss +303 -0
  100. package/styles/rich-text-editor/icons/_fabric-dark.scss +1 -1
  101. package/styles/rich-text-editor/icons/_fabric.scss +1 -1
  102. package/styles/rich-text-editor/icons/_highcontrast-light.scss +1 -1
  103. package/styles/rich-text-editor/icons/_highcontrast.scss +1 -1
  104. package/styles/rich-text-editor/icons/_material-dark.scss +1 -1
  105. package/styles/rich-text-editor/icons/_material.scss +1 -1
  106. package/styles/rich-text-editor/icons/_tailwind-dark.scss +1 -304
  107. package/styles/rich-text-editor/icons/_tailwind.scss +2 -2
  108. package/styles/rich-text-editor/material-dark.css +22 -14
  109. package/styles/rich-text-editor/material.css +19 -11
  110. package/styles/rich-text-editor/tailwind-dark.css +51 -20
  111. package/styles/rich-text-editor/tailwind.css +49 -18
  112. package/styles/tailwind-dark.css +51 -20
  113. package/styles/tailwind.css +49 -18
@@ -47,7 +47,7 @@ var Lists = /** @class */ (function () {
47
47
  var olListStartRegex = [/^[1]+[.]+$/, /^[i]+[.]+$/, /^[a]+[.]+$/];
48
48
  if (!isNullOrUndefined(range.startContainer.textContent.slice(0, range.startOffset))) {
49
49
  for (var i = 0; i < olListStartRegex.length; i++) {
50
- if (olListStartRegex[i].test(range.startContainer.textContent.slice(0, range.startOffset).trim())) {
50
+ if (olListStartRegex[i].test(range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim())) {
51
51
  return true;
52
52
  }
53
53
  }
@@ -75,8 +75,8 @@ var Lists = /** @class */ (function () {
75
75
  this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });
76
76
  e.event.preventDefault();
77
77
  }
78
- else if (range.startContainer.textContent.slice(0, range.startOffset).trim() === '*' ||
79
- range.startContainer.textContent.slice(0, range.startOffset).trim() === '-') {
78
+ else if (range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim() === '*' ||
79
+ range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim() === '-') {
80
80
  range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);
81
81
  this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });
82
82
  e.event.preventDefault();
@@ -97,15 +97,24 @@ var Lists = /** @class */ (function () {
97
97
  var startNodeParent = startNode.parentElement;
98
98
  if (isNOU(startNodeParent.parentElement.closest('UL')) && isNOU(startNodeParent.parentElement.closest('OL'))) {
99
99
  if (!isNOU(startNode.nextElementSibling)) {
100
- //startNode.classList.add('innerNode');
101
100
  var nearBlockNode = this.parent.domNode.blockParentNode(startNode);
102
101
  this.parent.nodeCutter.GetSpliceNode(range, nearBlockNode);
103
102
  }
104
- var paraTag = createElement('p');
105
- paraTag.innerHTML = '<br>';
106
- this.parent.domNode.insertAfter(paraTag, startNodeParent);
103
+ var insertTag = void 0;
104
+ if (e.enterAction === 'DIV') {
105
+ insertTag = createElement('div');
106
+ insertTag.innerHTML = '<br>';
107
+ }
108
+ else if (e.enterAction === 'P') {
109
+ insertTag = createElement('p');
110
+ insertTag.innerHTML = '<br>';
111
+ }
112
+ else {
113
+ insertTag = createElement('br');
114
+ }
115
+ this.parent.domNode.insertAfter(insertTag, startNodeParent);
107
116
  e.event.preventDefault();
108
- this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, paraTag, 0);
117
+ this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);
109
118
  if (startNodeParent.textContent === '') {
110
119
  detach(startNodeParent);
111
120
  }
@@ -402,6 +411,66 @@ var Lists = /** @class */ (function () {
402
411
  this.currentAction = e.subCommand = this.currentAction === 'NumberFormatList' ? 'OL' : this.currentAction === 'BulletFormatList' ? 'UL' : this.currentAction;
403
412
  this.domNode.setMarker(this.saveSelection);
404
413
  var listsNodes = this.domNode.blockNodes();
414
+ if (e.enterAction === 'BR') {
415
+ this.setSelectionBRConfig();
416
+ var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);
417
+ var selectedNodes = this.parent.nodeSelection.getSelectionNodes(allSelectedNode);
418
+ var currentFormatNodes = [];
419
+ if (selectedNodes.length === 0) {
420
+ selectedNodes.push(listsNodes[0]);
421
+ }
422
+ for (var i = 0; i < selectedNodes.length; i++) {
423
+ var currentNode = selectedNodes[i];
424
+ var previousCurrentNode = void 0;
425
+ while (!this.parent.domNode.isBlockNode(currentNode) && currentNode !== this.parent.editableElement) {
426
+ previousCurrentNode = currentNode;
427
+ currentNode = currentNode.parentElement;
428
+ }
429
+ if (this.parent.domNode.isBlockNode(currentNode) && currentNode === this.parent.editableElement) {
430
+ currentFormatNodes.push(previousCurrentNode);
431
+ }
432
+ }
433
+ for (var i = 0; i < currentFormatNodes.length; i++) {
434
+ if (!this.parent.domNode.isBlockNode(currentFormatNodes[i])) {
435
+ var currentNode = currentFormatNodes[i];
436
+ var previousNode = currentNode;
437
+ while (currentNode === this.parent.editableElement) {
438
+ previousNode = currentNode;
439
+ currentNode = currentNode.parentElement;
440
+ }
441
+ var tempElem = void 0;
442
+ if (this.parent.domNode.isBlockNode(previousNode.parentElement) &&
443
+ previousNode.parentElement === this.parent.editableElement) {
444
+ tempElem = createElement('p');
445
+ previousNode.parentElement.insertBefore(tempElem, previousNode);
446
+ tempElem.appendChild(previousNode);
447
+ }
448
+ else {
449
+ tempElem = previousNode;
450
+ }
451
+ var preNode = tempElem.previousSibling;
452
+ while (!isNOU(preNode) && preNode.nodeName !== 'BR' &&
453
+ !this.parent.domNode.isBlockNode(preNode)) {
454
+ tempElem.firstChild.parentElement.insertBefore(preNode, tempElem.firstChild);
455
+ preNode = tempElem.previousSibling;
456
+ }
457
+ if (!isNOU(preNode) && preNode.nodeName === 'BR') {
458
+ detach(preNode);
459
+ }
460
+ var postNode = tempElem.nextSibling;
461
+ while (!isNOU(postNode) && postNode.nodeName !== 'BR' &&
462
+ !this.parent.domNode.isBlockNode(postNode)) {
463
+ tempElem.appendChild(postNode);
464
+ postNode = tempElem.nextSibling;
465
+ }
466
+ if (!isNOU(postNode) && postNode.nodeName === 'BR') {
467
+ detach(postNode);
468
+ }
469
+ }
470
+ }
471
+ this.setSelectionBRConfig();
472
+ listsNodes = this.parent.domNode.blockNodes();
473
+ }
405
474
  for (var i = 0; i < listsNodes.length; i++) {
406
475
  if (listsNodes[i].tagName === 'TABLE' && !range.collapsed) {
407
476
  listsNodes.splice(i, 1);
@@ -422,6 +491,16 @@ var Lists = /** @class */ (function () {
422
491
  });
423
492
  }
424
493
  };
494
+ Lists.prototype.setSelectionBRConfig = function () {
495
+ var startElem = this.parent.editableElement.querySelector('.' + markerClassName.startSelection);
496
+ var endElem = this.parent.editableElement.querySelector('.' + markerClassName.endSelection);
497
+ if (isNOU(endElem)) {
498
+ this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, startElem, 0);
499
+ }
500
+ else {
501
+ this.parent.nodeSelection.setSelectionText(this.parent.currentDocument, startElem, endElem, 0, 0);
502
+ }
503
+ };
425
504
  Lists.prototype.applyLists = function (elements, type, selector, item) {
426
505
  var isReverse = true;
427
506
  if (this.isRevert(elements, type) && isNOU(item)) {
@@ -5,6 +5,7 @@
5
5
 
6
6
  */
7
7
  export declare class NodeCutter {
8
+ enterAction: string;
8
9
  position: number;
9
10
  private nodeSelection;
10
11
  /**
@@ -9,6 +9,7 @@ import { InsertMethods } from './insert-methods';
9
9
  */
10
10
  var NodeCutter = /** @class */ (function () {
11
11
  function NodeCutter() {
12
+ this.enterAction = 'P';
12
13
  this.position = -1;
13
14
  this.nodeSelection = new NodeSelection();
14
15
  }
@@ -1,4 +1,5 @@
1
1
  export declare class SelectionCommands {
2
+ static enterAction: string;
2
3
  /**
3
4
  * applyFormat method
4
5
  *
@@ -11,7 +12,7 @@ export declare class SelectionCommands {
11
12
  * @hidden
12
13
 
13
14
  */
14
- static applyFormat(docElement: Document, format: string, endNode: Node, value?: string, selector?: string): void;
15
+ static applyFormat(docElement: Document, format: string, endNode: Node, enterAction: string, value?: string, selector?: string): void;
15
16
  private static insertCursorNode;
16
17
  private static getCursorFormat;
17
18
  private static removeFormat;
@@ -23,7 +23,8 @@ var SelectionCommands = /** @class */ (function () {
23
23
  * @hidden
24
24
 
25
25
  */
26
- SelectionCommands.applyFormat = function (docElement, format, endNode, value, selector) {
26
+ SelectionCommands.applyFormat = function (docElement, format, endNode, enterAction, value, selector) {
27
+ this.enterAction = enterAction;
27
28
  var validFormats = ['bold', 'italic', 'underline', 'strikethrough', 'superscript',
28
29
  'subscript', 'uppercase', 'lowercase', 'fontcolor', 'fontname', 'fontsize', 'backgroundcolor'];
29
30
  if (validFormats.indexOf(format) > -1) {
@@ -99,7 +100,7 @@ var SelectionCommands = /** @class */ (function () {
99
100
  save.restore();
100
101
  }
101
102
  if (isSubSup) {
102
- this.applyFormat(docElement, format, endNode);
103
+ this.applyFormat(docElement, format, endNode, enterAction);
103
104
  }
104
105
  }
105
106
  };
@@ -119,6 +120,10 @@ var SelectionCommands = /** @class */ (function () {
119
120
  cursorNodes[0].firstElementChild.tagName.toLowerCase() === 'br')) {
120
121
  cursorNodes[0].innerHTML = '';
121
122
  }
123
+ if (cursorNodes.length === 1 && range.startOffset === 0 && (cursorNodes[0].nodeName === 'BR' ||
124
+ cursorNodes[0].nextSibling.nodeName === 'BR')) {
125
+ detach(cursorNodes[0].nodeName === '#text' ? cursorNodes[0].nextSibling : cursorNodes[0]);
126
+ }
122
127
  cursorNode = this.getInsertNode(docElement, range, format, value).firstChild;
123
128
  }
124
129
  return cursorNode;
@@ -334,10 +339,12 @@ var SelectionCommands = /** @class */ (function () {
334
339
  return nodes[index];
335
340
  };
336
341
  SelectionCommands.applyStyles = function (nodes, index, element) {
337
- nodes[index] = (index === (nodes.length - 1)) || nodes[index].nodeName === 'BR' ?
338
- InsertMethods.Wrap(nodes[index], element)
339
- : InsertMethods.WrapBefore(nodes[index], element, true);
340
- nodes[index] = this.getChildNode(nodes[index], element);
342
+ if (!(nodes[index].nodeName === 'BR' && this.enterAction === 'BR')) {
343
+ nodes[index] = (index === (nodes.length - 1)) || nodes[index].nodeName === 'BR' ?
344
+ InsertMethods.Wrap(nodes[index], element)
345
+ : InsertMethods.WrapBefore(nodes[index], element, true);
346
+ nodes[index] = this.getChildNode(nodes[index], element);
347
+ }
341
348
  return nodes[index];
342
349
  };
343
350
  SelectionCommands.getInsertNode = function (docElement, range, format, value) {
@@ -432,6 +439,7 @@ var SelectionCommands = /** @class */ (function () {
432
439
  ele.setAttribute('style', styles);
433
440
  }
434
441
  };
442
+ SelectionCommands.enterAction = 'P';
435
443
  return SelectionCommands;
436
444
  }());
437
445
  export { SelectionCommands };
@@ -28,12 +28,12 @@ var SelectionBasedExec = /** @class */ (function () {
28
28
  'subscript', 'uppercase', 'lowercase'];
29
29
  if (e.event.ctrlKey && validFormats.indexOf(e.event.action) > -1) {
30
30
  e.event.preventDefault();
31
- SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement);
31
+ SelectionCommands.applyFormat(this.parent.currentDocument, e.event.action, this.parent.editableElement, e.enterAction);
32
32
  this.callBack(e, e.event.action);
33
33
  }
34
34
  };
35
35
  SelectionBasedExec.prototype.applySelection = function (e) {
36
- SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.value, e.selector);
36
+ SelectionCommands.applyFormat(this.parent.currentDocument, e.subCommand.toLocaleLowerCase(), this.parent.editableElement, e.enterAction, e.value, e.selector);
37
37
  this.callBack(e, e.subCommand);
38
38
  };
39
39
  SelectionBasedExec.prototype.callBack = function (event, action) {
@@ -47,7 +47,7 @@ var TableCommand = /** @class */ (function () {
47
47
  }
48
48
  var tdWid = parseInt(e.item.width.width, 10) > 100 ?
49
49
  100 / e.item.columns : parseInt(e.item.width.width, 10) / e.item.columns;
50
- for (var i = 0; i < e.item.row; i++) {
50
+ for (var i = 0; i < e.item.rows; i++) {
51
51
  var row = createElement('tr');
52
52
  for (var j = 0; j < e.item.columns; j++) {
53
53
  var cell = createElement('td');
@@ -63,9 +63,19 @@ var TableCommand = /** @class */ (function () {
63
63
  this.removeEmptyNode();
64
64
  e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);
65
65
  if (table.nextElementSibling === null) {
66
- var emptyPara = createElement('p');
67
- emptyPara.appendChild(createElement('br'));
68
- this.insertAfter(emptyPara, table);
66
+ var insertElem = void 0;
67
+ if (e.enterAction === 'DIV') {
68
+ insertElem = createElement('div');
69
+ insertElem.appendChild(createElement('br'));
70
+ }
71
+ else if (e.enterAction === 'BR') {
72
+ insertElem = createElement('br');
73
+ }
74
+ else {
75
+ insertElem = createElement('p');
76
+ insertElem.appendChild(createElement('br'));
77
+ }
78
+ this.insertAfter(insertElem, table);
69
79
  }
70
80
  table.querySelector('td').classList.add('e-cell-select');
71
81
  if (e.callBack) {
@@ -207,16 +217,16 @@ var TableCommand = /** @class */ (function () {
207
217
  var curRow = closest(selectedCell, 'tr');
208
218
  var curCell;
209
219
  var allRows = closest((curRow), 'table').rows;
210
- var colIndex = Array.prototype.slice.call(curRow.querySelectorAll('th,td')).indexOf(selectedCell);
211
- var previousWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length);
212
- var currentWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll('td,th').length + 1);
220
+ var colIndex = Array.prototype.slice.call(curRow.querySelectorAll(':scope > td, :scope > th')).indexOf(selectedCell);
221
+ var previousWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length);
222
+ var currentWidth = parseInt(e.item.width, 10) / (curRow.querySelectorAll(':scope > td, :scope > th').length + 1);
213
223
  var currentTabElm = closest(curRow, 'table');
214
224
  var thTdElm = closest(curRow, 'table').querySelectorAll('th,td');
215
225
  for (var i = 0; i < thTdElm.length; i++) {
216
226
  thTdElm[i].dataset.oldWidth = (thTdElm[i].offsetWidth / currentTabElm.offsetWidth * 100) + "%";
217
227
  }
218
228
  for (var i = 0; i < allRows.length; i++) {
219
- curCell = allRows[i].querySelectorAll('th,td')[colIndex];
229
+ curCell = allRows[i].querySelectorAll(':scope > td, :scope > th')[colIndex];
220
230
  var colTemplate = curCell.cloneNode(true);
221
231
  colTemplate.innerHTML = '';
222
232
  colTemplate.appendChild(createElement('br'));
@@ -750,7 +760,7 @@ var TableCommand = /** @class */ (function () {
750
760
  // eslint-disable-next-line
751
761
  var _this = this;
752
762
  var colspan = 0;
753
- var allRows = _this.curTable.querySelectorAll('tr');
763
+ var allRows = _this.curTable.rows;
754
764
  for (var i = 0; i <= allRows.length - 1; i++) {
755
765
  var ele = allRows[i];
756
766
  var index = 0;
@@ -1,4 +1,4 @@
1
- import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU, isBlazor } from '@syncfusion/ej2-base';
1
+ import { detach, getUniqueID, append, closest, selectAll, select, isNullOrUndefined as isNOU } from '@syncfusion/ej2-base';
2
2
  import { addClass, removeClass, Browser, isNullOrUndefined, setStyleAttribute } from '@syncfusion/ej2-base';
3
3
  import { isCollide } from '@syncfusion/ej2-popups';
4
4
  import * as events from '../base/constant';
@@ -179,8 +179,7 @@ var BaseQuickToolbar = /** @class */ (function () {
179
179
  */
180
180
  BaseQuickToolbar.prototype.showPopup = function (x, y, target) {
181
181
  var _this = this;
182
- var eventArgs = isBlazor() ? { cancel: false, targetElement: target } :
183
- { popup: this.popupObj, cancel: false, targetElement: target };
182
+ var eventArgs = { popup: this.popupObj, cancel: false, targetElement: target };
184
183
  this.parent.trigger(events.beforeQuickToolbarOpen, eventArgs, function (beforeQuickToolbarArgs) {
185
184
  if (!beforeQuickToolbarArgs.cancel) {
186
185
  var editPanelTop = void 0;
@@ -307,7 +306,7 @@ var BaseQuickToolbar = /** @class */ (function () {
307
306
  this.colorPickerObj.destroyColorPicker();
308
307
  removeClass([this.element], [classes.CLS_POP]);
309
308
  detach(element);
310
- var args = isBlazor() ? { element: this.popupObj.element } : this.popupObj;
309
+ var args = this.popupObj;
311
310
  this.parent.trigger(events.quickToolbarClose, args);
312
311
  }
313
312
  };
@@ -0,0 +1,18 @@
1
+ import { IRichTextEditor } from '../base/interface';
2
+ /**
3
+ * `EnterKey` module is used to handle enter key press actions.
4
+ */
5
+ export declare class EnterKeyAction {
6
+ private parent;
7
+ private range;
8
+ private startNode;
9
+ private endNode;
10
+ constructor(parent?: IRichTextEditor);
11
+ protected addEventListener(): void;
12
+ private destroy;
13
+ private removeEventListener;
14
+ private getRangeNode;
15
+ private enterHandler;
16
+ private insertFocusContent;
17
+ private createInsertElement;
18
+ }
@@ -0,0 +1,290 @@
1
+ import { isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';
2
+ import * as events from '../base/constant';
3
+ /**
4
+ * `EnterKey` module is used to handle enter key press actions.
5
+ */
6
+ var EnterKeyAction = /** @class */ (function () {
7
+ function EnterKeyAction(parent) {
8
+ this.parent = parent;
9
+ this.addEventListener();
10
+ }
11
+ EnterKeyAction.prototype.addEventListener = function () {
12
+ this.parent.on(events.enterHandler, this.enterHandler, this);
13
+ this.parent.on(events.destroy, this.destroy, this);
14
+ };
15
+ EnterKeyAction.prototype.destroy = function () {
16
+ this.removeEventListener();
17
+ };
18
+ EnterKeyAction.prototype.removeEventListener = function () {
19
+ this.parent.off(events.enterHandler, this.enterHandler);
20
+ this.parent.off(events.destroy, this.destroy);
21
+ };
22
+ EnterKeyAction.prototype.getRangeNode = function () {
23
+ this.range = this.parent.getRange();
24
+ this.startNode = this.range.startContainer.nodeName === '#text' ? this.range.startContainer.parentElement :
25
+ this.range.startContainer;
26
+ this.endNode = this.range.endContainer.nodeName === '#text' ? this.range.endContainer.parentElement :
27
+ this.range.endContainer;
28
+ };
29
+ EnterKeyAction.prototype.enterHandler = function (e) {
30
+ var _this = this;
31
+ this.getRangeNode();
32
+ if (e.args.which === 13 && e.args.code === 'Enter') {
33
+ if (isNOU(this.startNode.closest('LI')) && isNOU(this.endNode.closest('LI')) && isNOU(this.startNode.closest('TABLE')) &&
34
+ isNOU(this.endNode.closest('TABLE')) && isNOU(this.startNode.closest('PRE')) && isNOU(this.endNode.closest('PRE'))) {
35
+ var shiftKey_1 = e.args.shiftKey;
36
+ var actionBeginArgs = {
37
+ cancel: false,
38
+ name: events.actionBegin,
39
+ requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction',
40
+ originalEvent: e.args
41
+ };
42
+ this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {
43
+ if (!actionBeginArgs.cancel) {
44
+ if (!(_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.range.endContainer)) {
45
+ _this.range.deleteContents();
46
+ if (_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.length === 0 &&
47
+ _this.range.startContainer.parentElement !== _this.parent.inputElement) {
48
+ if (_this.parent.enterKey === 'BR') {
49
+ _this.range.startContainer.parentElement.innerHTML = '&#8203;';
50
+ }
51
+ else {
52
+ _this.range.startContainer.parentElement.innerHTML = '<br>';
53
+ }
54
+ }
55
+ else if (_this.range.startContainer === _this.parent.inputElement && _this.range.startContainer.innerHTML === '') {
56
+ _this.range.startContainer.innerHTML = '<br>';
57
+ var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];
58
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);
59
+ }
60
+ else if (_this.parent.inputElement === _this.range.startContainer) {
61
+ var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];
62
+ if (focusElem.nodeName === '#text' && focusElem.textContent.length === 0) {
63
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.previousSibling.textContent.length);
64
+ }
65
+ else {
66
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length >= 0 ? 0 : 1);
67
+ if (focusElem.previousSibling.textContent.length === 0) {
68
+ detach(focusElem.previousSibling);
69
+ }
70
+ else if (focusElem.textContent.length === 0) {
71
+ var currentFocusElem = focusElem.previousSibling.lastChild;
72
+ var finalFocusElem = void 0;
73
+ while (currentFocusElem.nodeName !== '#text') {
74
+ finalFocusElem = currentFocusElem;
75
+ currentFocusElem = currentFocusElem.lastChild;
76
+ }
77
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, currentFocusElem.textContent.length);
78
+ detach(focusElem);
79
+ }
80
+ else if (_this.parent.enterKey !== 'BR' &&
81
+ focusElem.previousSibling.textContent.length !== 0 && focusElem.textContent.length !== 0) {
82
+ e.args.preventDefault();
83
+ return;
84
+ }
85
+ }
86
+ _this.getRangeNode();
87
+ }
88
+ }
89
+ if (_this.range.startContainer === _this.range.endContainer && _this.range.startOffset === 0 &&
90
+ _this.range.startOffset == _this.range.endOffset && _this.range.startContainer === _this.parent.inputElement) {
91
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], _this.range.startOffset);
92
+ _this.getRangeNode();
93
+ }
94
+ if (_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV' ||
95
+ (_this.parent.shiftEnterKey === 'P' && shiftKey_1) ||
96
+ (_this.parent.shiftEnterKey === 'DIV' && shiftKey_1)) {
97
+ var nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);
98
+ var isImageNode = false;
99
+ if (_this.range.startOffset === 0 && _this.range.endOffset === 0 && !(!isNOU(_this.range.startContainer.previousSibling) && _this.range.startContainer.previousSibling.nodeName === 'IMG')) {
100
+ var isNearBlockLengthZero = void 0;
101
+ var newElem = void 0;
102
+ if (_this.range.startContainer.nodeName === 'IMG') {
103
+ newElem = _this.createInsertElement(shiftKey_1);
104
+ isImageNode = true;
105
+ isNearBlockLengthZero = false;
106
+ }
107
+ else {
108
+ if (nearBlockNode.textContent.length !== 0) {
109
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
110
+ isNearBlockLengthZero = false;
111
+ }
112
+ else {
113
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
114
+ isNearBlockLengthZero = true;
115
+ }
116
+ }
117
+ var insertElem = _this.createInsertElement(shiftKey_1);
118
+ while (newElem.firstChild) {
119
+ insertElem.appendChild(newElem.firstChild);
120
+ }
121
+ nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);
122
+ if (!isNearBlockLengthZero) {
123
+ var currentFocusElem = insertElem;
124
+ var finalFocusElem = void 0;
125
+ while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
126
+ finalFocusElem = currentFocusElem;
127
+ currentFocusElem = currentFocusElem.lastChild;
128
+ }
129
+ finalFocusElem.innerHTML = '<br>';
130
+ if (!isImageNode) {
131
+ detach(nearBlockNode);
132
+ }
133
+ }
134
+ }
135
+ else if (nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG')) {
136
+ if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {
137
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
138
+ _this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);
139
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);
140
+ }
141
+ else {
142
+ var insertElem = _this.createInsertElement(shiftKey_1);
143
+ insertElem.innerHTML = '<br>';
144
+ _this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);
145
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);
146
+ }
147
+ }
148
+ else {
149
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
150
+ if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&
151
+ newElem.childNodes[0].textContent.length === 0) {
152
+ detach(newElem.childNodes[0]);
153
+ }
154
+ if (newElem.textContent.trim().length === 0) {
155
+ var brElm = _this.parent.createElement('br');
156
+ _this.startNode.appendChild(brElm);
157
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);
158
+ }
159
+ if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||
160
+ _this.parent.shiftEnterKey === 'P') && shiftKey_1)) {
161
+ var insertElm = _this.createInsertElement(shiftKey_1);
162
+ while (newElem.firstChild) {
163
+ insertElm.appendChild(newElem.firstChild);
164
+ }
165
+ _this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);
166
+ detach(newElem);
167
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElm, insertElm.textContent.length >= 0 ? 0 : 1);
168
+ }
169
+ }
170
+ e.args.preventDefault();
171
+ }
172
+ if (_this.parent.enterKey === 'BR' && !shiftKey_1) {
173
+ var currentParent = void 0;
174
+ if (!_this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {
175
+ var currentNode = _this.startNode;
176
+ var previousNode = currentNode;
177
+ while (!_this.parent.formatter.editorManager.domNode.isBlockNode(currentNode)) {
178
+ previousNode = currentNode;
179
+ currentNode = currentNode.parentElement;
180
+ }
181
+ currentParent = currentNode === _this.parent.inputElement ?
182
+ previousNode : currentNode;
183
+ }
184
+ else {
185
+ currentParent = _this.startNode;
186
+ }
187
+ var isEmptyBrInserted = false;
188
+ if (currentParent !== _this.parent.inputElement &&
189
+ _this.parent.formatter.editorManager.domNode.isBlockNode(currentParent) &&
190
+ _this.range.startOffset === _this.range.endOffset &&
191
+ _this.range.startOffset === currentParent.textContent.length) {
192
+ var outerBRElem = _this.parent.createElement('br');
193
+ _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);
194
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), outerBRElem, 0);
195
+ }
196
+ else if (!isNOU(currentParent) && currentParent !== _this.parent.inputElement && currentParent.nodeName !== 'BR') {
197
+ if (currentParent.textContent.trim().length === 0 || (currentParent.textContent.trim().length === 1 &&
198
+ currentParent.textContent.charCodeAt(0) === 8203)) {
199
+ var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true).cloneNode(true);
200
+ _this.parent.formatter.editorManager.domNode.insertAfter(newElem, currentParent);
201
+ var outerBRElem = _this.parent.createElement('br');
202
+ newElem.parentElement.insertBefore(outerBRElem, newElem);
203
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);
204
+ }
205
+ else {
206
+ var newElem = void 0;
207
+ var focusElem = void 0;
208
+ var outerBRElem = _this.parent.createElement('br');
209
+ if (_this.range.startOffset === 0 && _this.range.endOffset === 0 &&
210
+ !isNOU(currentParent.previousSibling) && currentParent.previousSibling.nodeName === 'BR') {
211
+ focusElem = _this.range.startContainer;
212
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, false).cloneNode(true);
213
+ _this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);
214
+ _this.insertFocusContent();
215
+ var currentFocusElem = outerBRElem.nextSibling;
216
+ var finalFocusElem = void 0;
217
+ while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
218
+ finalFocusElem = currentFocusElem;
219
+ currentFocusElem = currentFocusElem.lastChild;
220
+ }
221
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, 0);
222
+ isEmptyBrInserted = true;
223
+ }
224
+ else {
225
+ newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true);
226
+ newElem.parentElement.insertBefore(outerBRElem, newElem);
227
+ _this.insertFocusContent();
228
+ }
229
+ }
230
+ }
231
+ else {
232
+ var brElm = _this.parent.createElement('br');
233
+ if (_this.startNode.nodeName === 'BR' && _this.endNode.nodeName === 'BR' && _this.range.startOffset === 0 && _this.range.startOffset === _this.range.endOffset) {
234
+ _this.parent.formatter.editorManager.domNode.insertAfter(brElm, _this.startNode);
235
+ isEmptyBrInserted = true;
236
+ }
237
+ else {
238
+ if (_this.startNode === _this.parent.inputElement && !isNOU(_this.range.startContainer.previousSibling) &&
239
+ _this.range.startContainer.previousSibling.nodeName === 'BR' && _this.range.startContainer.textContent.length === 0) {
240
+ isEmptyBrInserted = true;
241
+ }
242
+ _this.range.insertNode(brElm);
243
+ }
244
+ if (isEmptyBrInserted || (!isNOU(brElm.nextElementSibling) && brElm.nextElementSibling.tagName === 'BR') || (!isNOU(brElm.nextSibling) && brElm.nextSibling.textContent.length > 0)) {
245
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), !isNOU(brElm.nextSibling) ? brElm.nextSibling : brElm, 0);
246
+ isEmptyBrInserted = false;
247
+ }
248
+ else {
249
+ var brElm2 = _this.parent.createElement('br');
250
+ _this.range.insertNode(brElm2);
251
+ _this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), brElm, 0);
252
+ }
253
+ }
254
+ e.args.preventDefault();
255
+ }
256
+ if (_this.range.startContainer.nodeName === '#text') {
257
+ _this.range.startContainer.parentElement.scrollIntoView(false);
258
+ }
259
+ else {
260
+ _this.range.startContainer.scrollIntoView(false);
261
+ }
262
+ _this.parent.trigger(events.actionComplete, { requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction', args: e.args });
263
+ }
264
+ });
265
+ }
266
+ }
267
+ };
268
+ EnterKeyAction.prototype.insertFocusContent = function () {
269
+ if (this.range.startContainer.textContent.length === 0) {
270
+ if (this.range.startContainer.nodeName === '#text') {
271
+ this.range.startContainer.parentElement.innerHTML = '&#8203;';
272
+ }
273
+ else {
274
+ this.range.startContainer.innerHTML = '&#8203;';
275
+ }
276
+ }
277
+ };
278
+ EnterKeyAction.prototype.createInsertElement = function (shiftKey) {
279
+ var insertElem;
280
+ if ((this.parent.enterKey === 'DIV' && !shiftKey) || (this.parent.shiftEnterKey === 'DIV' && shiftKey)) {
281
+ insertElem = this.parent.createElement('div');
282
+ }
283
+ else if ((this.parent.enterKey === 'P' && !shiftKey) || (this.parent.shiftEnterKey === 'P' && shiftKey)) {
284
+ insertElem = this.parent.createElement('p');
285
+ }
286
+ return insertElem;
287
+ };
288
+ return EnterKeyAction;
289
+ }());
290
+ export { EnterKeyAction };