@syncfusion/ej2-richtexteditor 23.2.7-52849 → 24.1.41-569421

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 (171) hide show
  1. package/.eslintrc.json +260 -0
  2. package/CHANGELOG.md +203 -1
  3. package/dist/ej2-richtexteditor.umd.min.js +1 -1
  4. package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-richtexteditor.es2015.js +9873 -7941
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +9967 -8034
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/package.json +13 -13
  10. package/src/common/config.d.ts +7 -0
  11. package/src/common/config.js +12 -1
  12. package/src/common/constant.d.ts +6 -0
  13. package/src/common/constant.js +6 -0
  14. package/src/common/interface.d.ts +12 -0
  15. package/src/common/types.d.ts +6 -0
  16. package/src/common/util.d.ts +6 -0
  17. package/src/common/util.js +61 -20
  18. package/src/editor-manager/base/constant.d.ts +6 -0
  19. package/src/editor-manager/base/constant.js +6 -0
  20. package/src/editor-manager/base/editor-manager.d.ts +5 -0
  21. package/src/editor-manager/base/editor-manager.js +59 -0
  22. package/src/editor-manager/base/interface.d.ts +8 -0
  23. package/src/editor-manager/plugin/audio.js +13 -3
  24. package/src/editor-manager/plugin/dom-node.d.ts +5 -1
  25. package/src/editor-manager/plugin/dom-node.js +169 -28
  26. package/src/editor-manager/plugin/format-painter-actions.d.ts +1 -0
  27. package/src/editor-manager/plugin/format-painter-actions.js +19 -1
  28. package/src/editor-manager/plugin/formats.d.ts +1 -0
  29. package/src/editor-manager/plugin/formats.js +38 -3
  30. package/src/editor-manager/plugin/image.js +38 -15
  31. package/src/editor-manager/plugin/indents.js +1 -1
  32. package/src/editor-manager/plugin/inserthtml.d.ts +1 -0
  33. package/src/editor-manager/plugin/inserthtml.js +83 -20
  34. package/src/editor-manager/plugin/link.js +8 -3
  35. package/src/editor-manager/plugin/lists.js +159 -70
  36. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +3 -0
  37. package/src/editor-manager/plugin/ms-word-clean-up.js +215 -85
  38. package/src/editor-manager/plugin/nodecutter.js +5 -2
  39. package/src/editor-manager/plugin/selection-commands.d.ts +2 -0
  40. package/src/editor-manager/plugin/selection-commands.js +248 -4
  41. package/src/editor-manager/plugin/table.d.ts +4 -1
  42. package/src/editor-manager/plugin/table.js +95 -49
  43. package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
  44. package/src/editor-manager/plugin/toolbar-status.js +20 -10
  45. package/src/editor-manager/plugin/undo.d.ts +1 -0
  46. package/src/editor-manager/plugin/undo.js +21 -1
  47. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +4 -3
  48. package/src/rich-text-editor/actions/base-quick-toolbar.js +61 -14
  49. package/src/rich-text-editor/actions/base-toolbar.js +33 -34
  50. package/src/rich-text-editor/actions/color-picker.d.ts +1 -0
  51. package/src/rich-text-editor/actions/color-picker.js +13 -3
  52. package/src/rich-text-editor/actions/count.js +1 -1
  53. package/src/rich-text-editor/actions/dropdown-buttons.d.ts +1 -0
  54. package/src/rich-text-editor/actions/dropdown-buttons.js +11 -5
  55. package/src/rich-text-editor/actions/emoji-picker.js +16 -7
  56. package/src/rich-text-editor/actions/enter-key.js +10 -5
  57. package/src/rich-text-editor/actions/file-manager.js +1 -1
  58. package/src/rich-text-editor/actions/format-painter.js +5 -2
  59. package/src/rich-text-editor/actions/full-screen.js +5 -4
  60. package/src/rich-text-editor/actions/html-editor.d.ts +2 -0
  61. package/src/rich-text-editor/actions/html-editor.js +124 -17
  62. package/src/rich-text-editor/actions/keyboard.js +3 -1
  63. package/src/rich-text-editor/actions/markdown-editor.js +3 -1
  64. package/src/rich-text-editor/actions/paste-clean-up.d.ts +5 -0
  65. package/src/rich-text-editor/actions/paste-clean-up.js +156 -28
  66. package/src/rich-text-editor/actions/quick-toolbar.d.ts +8 -0
  67. package/src/rich-text-editor/actions/quick-toolbar.js +59 -12
  68. package/src/rich-text-editor/actions/resize.js +2 -1
  69. package/src/rich-text-editor/actions/toolbar-action.js +1 -1
  70. package/src/rich-text-editor/actions/toolbar.d.ts +3 -3
  71. package/src/rich-text-editor/actions/toolbar.js +35 -96
  72. package/src/rich-text-editor/base/classes.d.ts +5 -5
  73. package/src/rich-text-editor/base/classes.js +5 -5
  74. package/src/rich-text-editor/base/constant.d.ts +46 -1
  75. package/src/rich-text-editor/base/constant.js +215 -1
  76. package/src/rich-text-editor/base/interface.d.ts +47 -3
  77. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +3 -3
  78. package/src/rich-text-editor/base/rich-text-editor.d.ts +16 -4
  79. package/src/rich-text-editor/base/rich-text-editor.js +184 -97
  80. package/src/rich-text-editor/base/util.js +22 -4
  81. package/src/rich-text-editor/formatter/formatter.js +16 -4
  82. package/src/rich-text-editor/models/default-locale.js +31 -25
  83. package/src/rich-text-editor/models/items.js +3 -3
  84. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +1 -1
  85. package/src/rich-text-editor/models/toolbar-settings.d.ts +1 -1
  86. package/src/rich-text-editor/models/toolbar-settings.js +1 -1
  87. package/src/rich-text-editor/renderer/audio-module.d.ts +1 -0
  88. package/src/rich-text-editor/renderer/audio-module.js +22 -4
  89. package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -0
  90. package/src/rich-text-editor/renderer/dialog-renderer.js +22 -2
  91. package/src/rich-text-editor/renderer/iframe-content-renderer.js +2 -1
  92. package/src/rich-text-editor/renderer/image-module.d.ts +9 -1
  93. package/src/rich-text-editor/renderer/image-module.js +248 -213
  94. package/src/rich-text-editor/renderer/link-module.js +53 -24
  95. package/src/rich-text-editor/renderer/table-module.d.ts +10 -1
  96. package/src/rich-text-editor/renderer/table-module.js +343 -168
  97. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +3 -6
  98. package/src/rich-text-editor/renderer/toolbar-renderer.js +106 -101
  99. package/src/rich-text-editor/renderer/video-module.d.ts +3 -0
  100. package/src/rich-text-editor/renderer/video-module.js +82 -41
  101. package/src/rich-text-editor/renderer/view-source.d.ts +1 -0
  102. package/src/rich-text-editor/renderer/view-source.js +15 -5
  103. package/src/selection/selection.js +3 -0
  104. package/styles/bootstrap-dark.css +353 -103
  105. package/styles/bootstrap.css +357 -112
  106. package/styles/bootstrap4.css +338 -96
  107. package/styles/bootstrap5-dark.css +344 -97
  108. package/styles/bootstrap5.css +344 -97
  109. package/styles/fabric-dark.css +332 -90
  110. package/styles/fabric.css +333 -91
  111. package/styles/fluent-dark.css +360 -98
  112. package/styles/fluent.css +360 -98
  113. package/styles/highcontrast-light.css +332 -90
  114. package/styles/highcontrast.css +336 -91
  115. package/styles/material-dark.css +339 -92
  116. package/styles/material.css +339 -92
  117. package/styles/material3-dark.css +348 -100
  118. package/styles/material3.css +348 -100
  119. package/styles/rich-text-editor/_bds-definition.scss +279 -0
  120. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +17 -13
  121. package/styles/rich-text-editor/_bootstrap-definition.scss +22 -19
  122. package/styles/rich-text-editor/_bootstrap4-definition.scss +11 -7
  123. package/styles/rich-text-editor/_bootstrap5-definition.scss +8 -4
  124. package/styles/rich-text-editor/_fabric-dark-definition.scss +6 -2
  125. package/styles/rich-text-editor/_fabric-definition.scss +7 -3
  126. package/styles/rich-text-editor/_fluent-definition.scss +14 -10
  127. package/styles/rich-text-editor/_fusionnew-definition.scss +7 -3
  128. package/styles/rich-text-editor/_highcontrast-definition.scss +7 -3
  129. package/styles/rich-text-editor/_highcontrast-light-definition.scss +6 -2
  130. package/styles/rich-text-editor/_layout.scss +211 -34
  131. package/styles/rich-text-editor/_material-dark-definition.scss +6 -2
  132. package/styles/rich-text-editor/_material-definition.scss +6 -2
  133. package/styles/rich-text-editor/_material3-definition.scss +16 -12
  134. package/styles/rich-text-editor/_tailwind-definition.scss +23 -19
  135. package/styles/rich-text-editor/_theme.scss +113 -24
  136. package/styles/rich-text-editor/bootstrap-dark.css +353 -103
  137. package/styles/rich-text-editor/bootstrap.css +357 -112
  138. package/styles/rich-text-editor/bootstrap4.css +338 -96
  139. package/styles/rich-text-editor/bootstrap5-dark.css +344 -97
  140. package/styles/rich-text-editor/bootstrap5.css +344 -97
  141. package/styles/rich-text-editor/fabric-dark.css +332 -90
  142. package/styles/rich-text-editor/fabric.css +333 -91
  143. package/styles/rich-text-editor/fluent-dark.css +360 -98
  144. package/styles/rich-text-editor/fluent.css +360 -98
  145. package/styles/rich-text-editor/highcontrast-light.css +332 -90
  146. package/styles/rich-text-editor/highcontrast.css +336 -91
  147. package/styles/rich-text-editor/icons/_bds.scss +348 -0
  148. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +4 -4
  149. package/styles/rich-text-editor/icons/_bootstrap.scss +4 -4
  150. package/styles/rich-text-editor/icons/_bootstrap4.scss +4 -4
  151. package/styles/rich-text-editor/icons/_bootstrap5.scss +4 -4
  152. package/styles/rich-text-editor/icons/_fabric-dark.scss +4 -4
  153. package/styles/rich-text-editor/icons/_fabric.scss +4 -4
  154. package/styles/rich-text-editor/icons/_fluent.scss +4 -4
  155. package/styles/rich-text-editor/icons/_fusionnew.scss +3 -3
  156. package/styles/rich-text-editor/icons/_highcontrast-light.scss +4 -4
  157. package/styles/rich-text-editor/icons/_highcontrast.scss +4 -4
  158. package/styles/rich-text-editor/icons/_material-dark.scss +4 -4
  159. package/styles/rich-text-editor/icons/_material.scss +4 -4
  160. package/styles/rich-text-editor/icons/_material3.scss +4 -4
  161. package/styles/rich-text-editor/icons/_tailwind.scss +4 -4
  162. package/styles/rich-text-editor/material-dark.css +339 -92
  163. package/styles/rich-text-editor/material.css +339 -92
  164. package/styles/rich-text-editor/material3-dark.css +348 -100
  165. package/styles/rich-text-editor/material3.css +348 -100
  166. package/styles/rich-text-editor/tailwind-dark.css +383 -113
  167. package/styles/rich-text-editor/tailwind.css +383 -113
  168. package/styles/tailwind-dark.css +383 -113
  169. package/styles/tailwind.css +383 -113
  170. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -41
  171. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -27
@@ -3,7 +3,7 @@ import { NodeCutter } from './nodecutter';
3
3
  import * as CONSTANT from './../base/constant';
4
4
  import { detach, Browser, isNullOrUndefined as isNOU, createElement, closest } from '@syncfusion/ej2-base';
5
5
  import { InsertMethods } from './insert-methods';
6
- import { updateTextNode } from './../../common/util';
6
+ import { updateTextNode, nestedListCleanUp } from './../../common/util';
7
7
  /**
8
8
  * Insert a HTML Node or Text
9
9
  *
@@ -59,6 +59,10 @@ var InsertHtml = /** @class */ (function () {
59
59
  var isCollapsed = range.collapsed;
60
60
  var nodes = this.getNodeCollection(range, nodeSelection, node);
61
61
  var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];
62
+ if (closestParentNode && closestParentNode.nodeName === 'LI' && node.nodeName.toLowerCase() === 'table') {
63
+ this.insertTableInList(range, node, closestParentNode, nodes[0], nodeCutter);
64
+ return;
65
+ }
62
66
  if (isExternal || (!isNOU(node) && !isNOU(node.classList) &&
63
67
  node.classList.contains('pasteContent'))) {
64
68
  this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode, enterAction);
@@ -82,7 +86,12 @@ var InsertHtml = /** @class */ (function () {
82
86
  lasNode.textContent.length : lasNode.childNodes.length);
83
87
  range = nodeSelection.getRange(docElement);
84
88
  }
85
- range.extractContents();
89
+ if (range.startContainer.parentElement.closest('ol,ul') !== null && range.endContainer.parentElement.closest('ol,ul') !== null) {
90
+ nestedListCleanUp(range);
91
+ }
92
+ else {
93
+ range.extractContents();
94
+ }
86
95
  if (insertNode.tagName === 'TABLE') {
87
96
  this.removeEmptyElements(editNode);
88
97
  }
@@ -119,6 +128,9 @@ var InsertHtml = /** @class */ (function () {
119
128
  InsertMethods.AppendBefore(node, parentNode.firstChild, false);
120
129
  }
121
130
  }
131
+ else if (isNOU(preNode.previousSibling) && insertNode.tagName === 'TABLE') {
132
+ parentNode.prepend(node);
133
+ }
122
134
  else {
123
135
  parentNode.appendChild(node);
124
136
  }
@@ -204,19 +216,21 @@ var InsertHtml = /** @class */ (function () {
204
216
  || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&
205
217
  CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {
206
218
  preNode = nodeCutter.GetSpliceNode(range, closestParentNode);
207
- sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
208
- if (nodes.length === 1) {
209
- nodeSelection.setSelectionContents(docElement, preNode);
210
- range = nodeSelection.getRange(docElement);
211
- isSingleNode = true;
212
- }
213
- else {
214
- lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);
215
- lasNode = isNOU(lasNode) ? preNode : lasNode;
216
- nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?
217
- lasNode.textContent.length : lasNode.childNodes.length);
218
- range = nodeSelection.getRange(docElement);
219
- isSingleNode = false;
219
+ if (!isNOU(preNode)) {
220
+ sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
221
+ if (nodes.length === 1) {
222
+ nodeSelection.setSelectionContents(docElement, preNode);
223
+ range = nodeSelection.getRange(docElement);
224
+ isSingleNode = true;
225
+ }
226
+ else {
227
+ lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);
228
+ lasNode = isNOU(lasNode) ? preNode : lasNode;
229
+ nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?
230
+ lasNode.textContent.length : lasNode.childNodes.length);
231
+ range = nodeSelection.getRange(docElement);
232
+ isSingleNode = false;
233
+ }
220
234
  }
221
235
  }
222
236
  var containsBlockNode = false;
@@ -240,12 +254,17 @@ var InsertHtml = /** @class */ (function () {
240
254
  preNode.parentNode.replaceChild(fragment, preNode);
241
255
  }
242
256
  else {
257
+ var startContainerParent = range.startContainer.parentNode;
258
+ // Get the index of the start container among its siblings
259
+ var startIndex = Array.prototype.indexOf.call(startContainerParent.childNodes, range.startContainer);
243
260
  range.deleteContents();
261
+ range.setStart(startContainerParent, startIndex);
262
+ range.setEnd(startContainerParent, startIndex);
244
263
  if (!isNOU(lasNode)) {
245
264
  detach(lasNode);
246
265
  }
247
266
  // eslint-disable-next-line
248
- !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);
267
+ !isNOU(sibNode) ? (sibNode.parentNode === editNode ? sibNode.appendChild(fragment) : sibNode.parentNode.appendChild(fragment)) : range.insertNode(fragment);
249
268
  }
250
269
  }
251
270
  else {
@@ -285,6 +304,9 @@ var InsertHtml = /** @class */ (function () {
285
304
  var paraElm = void 0;
286
305
  var previousParent = void 0;
287
306
  if (!this.contentsDeleted) {
307
+ if (!isCollapsed && range.startContainer.parentElement.textContent.length === 0 && range.startContainer.nodeName === 'BR' && range.startContainer.parentElement.nodeName === 'P') {
308
+ editNode.removeChild(range.startContainer.parentElement);
309
+ }
288
310
  range.deleteContents();
289
311
  }
290
312
  while (node.firstChild) {
@@ -296,7 +318,7 @@ var InsertHtml = /** @class */ (function () {
296
318
  (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0 && isFirstTextNode)) {
297
319
  lastSelectionNode = node.firstChild;
298
320
  if (isNOU(node.previousElementSibling)) {
299
- var firstParaElm = createElement('p');
321
+ var firstParaElm = enterAction === 'DIV' ? createElement('div') : createElement('p');
300
322
  node.parentElement.insertBefore(firstParaElm, node);
301
323
  }
302
324
  if (node.previousElementSibling.nodeName === 'BR') {
@@ -311,7 +333,7 @@ var InsertHtml = /** @class */ (function () {
311
333
  if (node.firstChild.nodeName === '#text' ||
312
334
  (this.inlineNode.indexOf(node.firstChild.nodeName.toLocaleLowerCase()) >= 0)) {
313
335
  if (!isPreviousInlineElem) {
314
- paraElm = createElement('p');
336
+ paraElm = enterAction === 'DIV' ? createElement('div') : createElement('p');
315
337
  paraElm.appendChild(node.firstChild);
316
338
  fragment.appendChild(paraElm);
317
339
  }
@@ -405,7 +427,7 @@ var InsertHtml = /** @class */ (function () {
405
427
  if (blockNode.nodeName === 'BODY' && range.startContainer === range.endContainer && range.startContainer.nodeType === 1) {
406
428
  blockNode = range.startContainer;
407
429
  }
408
- if (blockNode.closest('LI') && node && node.firstElementChild &&
430
+ if (blockNode.closest('LI') && blockNode.nodeName !== 'TD' && blockNode.nodeName !== 'TH' && blockNode.nodeName !== 'TR' && node && node.firstElementChild &&
409
431
  ((node).firstElementChild.tagName === 'OL' || node.firstElementChild.tagName === 'UL')) {
410
432
  var liNode = void 0;
411
433
  while (node.firstElementChild.lastElementChild && node.firstElementChild.lastElementChild.tagName === 'LI') {
@@ -444,6 +466,12 @@ var InsertHtml = /** @class */ (function () {
444
466
  }
445
467
  if (!range.collapsed) {
446
468
  range.deleteContents();
469
+ var value = range.startContainer;
470
+ if (!isNOU(value) && value.nodeName === 'LI' && !isNOU(value.parentElement) && (value.parentElement.nodeName === 'OL' || value.parentElement.nodeName === 'UL') && value.textContent.trim() === '') {
471
+ value.parentElement.querySelectorAll('li').forEach(function (item) {
472
+ item.remove();
473
+ });
474
+ }
447
475
  }
448
476
  range.insertNode(node);
449
477
  this.contentsDeleted = true;
@@ -470,7 +498,15 @@ var InsertHtml = /** @class */ (function () {
470
498
  };
471
499
  InsertHtml.imageFocus = function (node, nodeSelection, docElement) {
472
500
  var focusNode = document.createTextNode(' ');
473
- node.parentNode.insertBefore(focusNode, node.nextSibling);
501
+ if (node.parentNode && node.parentNode.nodeName === 'A') {
502
+ var anchorTag = node.parentNode;
503
+ var parentNode = anchorTag.parentNode;
504
+ parentNode.insertBefore(focusNode, anchorTag.nextSibling);
505
+ parentNode.insertBefore(node, focusNode);
506
+ }
507
+ else {
508
+ node.parentNode.insertBefore(focusNode, node.nextSibling);
509
+ }
474
510
  nodeSelection.setSelectionText(docElement, node.nextSibling, node.nextSibling, 0, 0);
475
511
  };
476
512
  // eslint-disable-next-line
@@ -525,6 +561,9 @@ var InsertHtml = /** @class */ (function () {
525
561
  };
526
562
  InsertHtml.closestEle = function (element, editNode) {
527
563
  var el = element;
564
+ if (closest(el, 'li')) {
565
+ return closest(el, 'li');
566
+ }
528
567
  while (el && el.nodeType === 1) {
529
568
  if (el.parentNode === editNode ||
530
569
  (!isNOU(el.parentNode.tagName) &&
@@ -535,6 +574,30 @@ var InsertHtml = /** @class */ (function () {
535
574
  }
536
575
  return null;
537
576
  };
577
+ InsertHtml.insertTableInList = function (range, insertNode, parentNode, currentNode, nodeCutter) {
578
+ if (range.collapsed) {
579
+ var isStart = range.startOffset === 0;
580
+ var isEnd = range.startContainer.textContent.trimEnd().length === range.startOffset;
581
+ if (isStart || isEnd) {
582
+ if (isStart) {
583
+ InsertMethods.AppendBefore(insertNode, currentNode, false);
584
+ }
585
+ else {
586
+ InsertMethods.AppendBefore(insertNode, currentNode, true);
587
+ }
588
+ }
589
+ else {
590
+ var preNode = nodeCutter.SplitNode(range, parentNode, true);
591
+ var sibNode = preNode.previousSibling;
592
+ sibNode.appendChild(insertNode);
593
+ }
594
+ }
595
+ else {
596
+ range.deleteContents();
597
+ parentNode.appendChild(insertNode);
598
+ }
599
+ insertNode.classList.add('ignore-table');
600
+ };
538
601
  /**
539
602
  * Insert method
540
603
  *
@@ -54,7 +54,8 @@ var LinkCommand = /** @class */ (function () {
54
54
  }
55
55
  if (!isNOU(e.item.text) && e.item.text !== '') {
56
56
  linkText = anchorEle.innerText;
57
- anchorEle.innerText = e.item.text;
57
+ anchorEle.firstChild.nodeName === '#text' ? anchorEle.innerText = e.item.text :
58
+ anchorEle.firstChild.innerText = e.item.text;
58
59
  }
59
60
  if (!isNOU(e.item.target)) {
60
61
  anchorEle.setAttribute('target', e.item.target);
@@ -70,7 +71,8 @@ var LinkCommand = /** @class */ (function () {
70
71
  }
71
72
  else {
72
73
  var startIndex = e.item.action === 'Paste' ? anchorEle.childNodes[0].textContent.length : 0;
73
- e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle.childNodes[0], anchorEle.childNodes[0], startIndex, anchorEle.childNodes[0].textContent.length);
74
+ var endIndex = anchorEle.firstChild.nodeName === '#text' ? anchorEle.childNodes[0].textContent.length : anchorEle.childNodes.length;
75
+ e.item.selection.setSelectionText(this.parent.currentDocument, anchorEle.childNodes[0], anchorEle.childNodes[0], startIndex, endIndex);
74
76
  }
75
77
  }
76
78
  else {
@@ -194,7 +196,7 @@ var LinkCommand = /** @class */ (function () {
194
196
  for (var i = 0, j_2 = 0, k = 0; i <= finalinlineNodes.length; i++) {
195
197
  if (i === 0) {
196
198
  finalinlineNodes[i].parentNode.insertBefore(anchorNodes[j_2], finalinlineNodes[i].nextSibling);
197
- if (this.parent.domNode.blockNodes().length === 1) {
199
+ if (this.parent.domNode.blockNodes().length === 1 && anchorNodes.length === 1) {
198
200
  this.parent.nodeSelection.setSelectionNode(this.parent.currentDocument, anchorNodes[j_2]);
199
201
  }
200
202
  removeNodes[k] = finalinlineNodes[i];
@@ -230,6 +232,9 @@ var LinkCommand = /** @class */ (function () {
230
232
  if (!isNOU(e.item.target)) {
231
233
  anchorEle.setAttribute('target', e.item.target);
232
234
  }
235
+ if (!isNOU(e.item.ariaLabel)) {
236
+ anchorEle.setAttribute('aria-label', e.item.ariaLabel);
237
+ }
233
238
  return anchorEle;
234
239
  };
235
240
  LinkCommand.prototype.getSelectionNodes = function (nodeCollection) {
@@ -72,14 +72,21 @@ var Lists = /** @class */ (function () {
72
72
  var preElementOLTest = this.testList(preElement);
73
73
  var nextElementOLTest = this.testList(nextElement);
74
74
  if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {
75
+ var brElement = createElement('br');
75
76
  if (startElementOLTest) {
76
77
  range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);
78
+ if (range.startContainer.nodeName === '#text' && range.startContainer.textContent.length === 0) {
79
+ this.parent.domNode.insertAfter(brElement, range.startContainer);
80
+ }
77
81
  this.applyListsHandler({ subCommand: 'OL', callBack: e.callBack });
78
82
  e.event.preventDefault();
79
83
  }
80
84
  else if (range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim() === '*' ||
81
85
  range.startContainer.textContent.replace(/\u200B/g, '').slice(0, range.startOffset).trim() === '-') {
82
86
  range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);
87
+ if (range.startContainer.nodeName === '#text' && range.startContainer.textContent.length === 0) {
88
+ this.parent.domNode.insertAfter(brElement, range.startContainer);
89
+ }
83
90
  this.applyListsHandler({ subCommand: 'UL', callBack: e.callBack });
84
91
  e.event.preventDefault();
85
92
  }
@@ -107,7 +114,8 @@ var Lists = /** @class */ (function () {
107
114
  startNode.textContent = '';
108
115
  }
109
116
  var startNodeParent = startNode.parentElement;
110
- if (isNOU(startNodeParent.parentElement.closest('UL')) && isNOU(startNodeParent.parentElement.closest('OL'))) {
117
+ var parentOfCurrentOLUL = startNodeParent.parentElement;
118
+ if (isNOU(parentOfCurrentOLUL.closest('UL')) && isNOU(parentOfCurrentOLUL.closest('OL'))) {
111
119
  if (!isNOU(startNode.nextElementSibling)) {
112
120
  var nearBlockNode = this.parent.domNode.blockParentNode(startNode);
113
121
  this.parent.nodeCutter.GetSpliceNode(range, nearBlockNode);
@@ -134,6 +142,15 @@ var Lists = /** @class */ (function () {
134
142
  detach(startNode);
135
143
  }
136
144
  }
145
+ // To handle the nested enter key press in the list for the first LI element
146
+ if (!isNOU(parentOfCurrentOLUL) && (!isNOU(parentOfCurrentOLUL.closest('UL')) || !isNOU(parentOfCurrentOLUL.closest('OL'))) &&
147
+ parentOfCurrentOLUL.nodeName === 'LI' && parentOfCurrentOLUL.style.listStyleType === 'none' &&
148
+ parentOfCurrentOLUL.textContent === '' && startNode.textContent === '' && startNode === startNodeParent.firstElementChild &&
149
+ isNOU(startNode.nextSibling)) {
150
+ detach(startNodeParent);
151
+ parentOfCurrentOLUL.style.removeProperty('list-style-type');
152
+ e.event.preventDefault();
153
+ }
137
154
  }
138
155
  };
139
156
  Lists.prototype.backspaceList = function (e) {
@@ -190,11 +207,19 @@ var Lists = /** @class */ (function () {
190
207
  };
191
208
  Lists.prototype.removeList = function (range, e) {
192
209
  var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);
193
- var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
210
+ var endNode = (!isNOU(range.endContainer.parentElement.closest('li')) && range.endContainer.parentElement.closest('li').childElementCount > 1 && range.endContainer.nodeName === '#text') ? range.endContainer : this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
211
+ var parentList = (range.startContainer.nodeName === "#text") ? range.startContainer.parentElement.closest('li') : range.startContainer.closest('li');
212
+ var fullContent = "";
213
+ if (!isNOU(parentList) && !isNOU(parentList.firstChild)) {
214
+ parentList.childNodes.forEach(function (e) {
215
+ fullContent = fullContent + e.textContent;
216
+ });
217
+ }
218
+ ;
194
219
  startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;
195
220
  endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
196
221
  startNode = startNode.nodeName !== 'LI' && !isNOU(startNode.closest('LI')) ? startNode.closest('LI') : startNode;
197
- endNode = endNode.nodeName !== 'LI' && !isNOU(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
222
+ endNode = endNode.nodeName !== 'LI' && endNode.nodeName !== '#text' && !isNOU(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
198
223
  if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
199
224
  isNOU(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
200
225
  isNOU(startNode.previousElementSibling) && range.startOffset === 0) ||
@@ -211,6 +236,25 @@ var Lists = /** @class */ (function () {
211
236
  }
212
237
  e.event.preventDefault();
213
238
  }
239
+ else if (!isNOU(parentList) && !range.collapsed && parentList.textContent === fullContent) {
240
+ range.deleteContents();
241
+ this.parent.editableElement.querySelectorAll('li').forEach(function (li) {
242
+ if (!li.firstChild || li.textContent.trim() === '') {
243
+ li.parentNode.removeChild(li);
244
+ }
245
+ });
246
+ this.parent.editableElement.querySelectorAll('ol').forEach(function (ol) {
247
+ if (!ol.firstChild || ol.textContent.trim() === '') {
248
+ ol.parentNode.removeChild(ol);
249
+ }
250
+ });
251
+ this.parent.editableElement.querySelectorAll('ul').forEach(function (ul) {
252
+ if (!ul.firstChild || ul.textContent.trim() === '') {
253
+ ul.parentNode.removeChild(ul);
254
+ }
255
+ });
256
+ e.event.preventDefault();
257
+ }
214
258
  };
215
259
  Lists.prototype.onKeyUp = function () {
216
260
  if (!isNOU(this.commonLIParent) && !isNOU(this.commonLIParent.querySelector('.removeList'))) {
@@ -250,7 +294,7 @@ var Lists = /** @class */ (function () {
250
294
  if (e.event.which === 8) {
251
295
  this.backspaceList(e);
252
296
  }
253
- if (e.event.which === 46 && e.event.action === 'delete') {
297
+ if ((e.event.which === 46 && e.event.action === 'delete') || (e.event.which === 88 && e.event.action === 'cut')) {
254
298
  var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
255
299
  var commonAncestor = range.commonAncestorContainer;
256
300
  var startEle = range.startContainer;
@@ -507,7 +551,7 @@ var Lists = /** @class */ (function () {
507
551
  this.currentAction = e.subCommand;
508
552
  this.currentAction = e.subCommand = this.currentAction === 'NumberFormatList' ? 'OL' : this.currentAction === 'BulletFormatList' ? 'UL' : this.currentAction;
509
553
  this.domNode.setMarker(this.saveSelection);
510
- var listsNodes = this.domNode.blockNodes();
554
+ var listsNodes = this.domNode.blockNodes(true);
511
555
  if (e.enterAction === 'BR') {
512
556
  this.setSelectionBRConfig();
513
557
  var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);
@@ -600,12 +644,16 @@ var Lists = /** @class */ (function () {
600
644
  };
601
645
  Lists.prototype.applyLists = function (elements, type, selector, item, e) {
602
646
  var isReverse = true;
603
- if (this.isRevert(elements, type, item) && isNOU(item)) {
647
+ if (this.isRevert(elements, type, item) && isNOU(item) || (!isNOU(item) && item.listStyle === 'none')) {
604
648
  this.revertList(elements, e);
605
649
  this.removeEmptyListElements();
606
650
  }
607
651
  else {
608
652
  this.checkLists(elements, type, item);
653
+ var marginLeftAttribute = '';
654
+ if (elements[0].style.marginLeft !== '') {
655
+ marginLeftAttribute = ' style = "margin-left: ' + elements[0].style.marginLeft + ';"';
656
+ }
609
657
  for (var i = 0; i < elements.length; i++) {
610
658
  if (!isNOU(item) && !isNOU(item.listStyle)) {
611
659
  if (item.listStyle === 'listImage') {
@@ -616,16 +664,29 @@ var Lists = /** @class */ (function () {
616
664
  setStyleAttribute(elements[i], { 'list-style-type': item.listStyle.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase() });
617
665
  }
618
666
  }
667
+ var elemAtt = void 0;
668
+ elements[i].style.removeProperty('margin-left');
669
+ elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);
619
670
  if (elements[i].getAttribute('contenteditable') === 'true'
620
671
  && elements[i].childNodes.length === 1 && elements[i].childNodes[0].nodeName === 'TABLE') {
621
672
  var listEle = document.createElement(type);
622
673
  listEle.innerHTML = '<li><br/></li>';
623
674
  elements[i].appendChild(listEle);
624
675
  }
676
+ else if ('LI' !== elements[i].tagName && isNOU(item) &&
677
+ elements[i].nodeName === 'BLOCKQUOTE') {
678
+ isReverse = false;
679
+ var openTag = '<' + type + marginLeftAttribute + '>';
680
+ var closeTag = '</' + type + '>';
681
+ var newTag = 'li' + elemAtt;
682
+ var replaceHTML = elements[i].innerHTML;
683
+ var innerHTML = this.domNode.createTagString(newTag, null, replaceHTML);
684
+ var collectionString = openTag + innerHTML + closeTag;
685
+ elements[i].innerHTML = collectionString;
686
+ }
625
687
  else if ('LI' !== elements[i].tagName && isNOU(item)) {
626
688
  isReverse = false;
627
- var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);
628
- var openTag = '<' + type + '>';
689
+ var openTag = '<' + type + marginLeftAttribute + '>';
629
690
  var closeTag = '</' + type + '>';
630
691
  var newTag = 'li' + elemAtt;
631
692
  var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ?
@@ -637,8 +698,8 @@ var Lists = /** @class */ (function () {
637
698
  else if (!isNOU(item) && 'LI' !== elements[i].tagName) {
638
699
  // eslint-disable-next-line
639
700
  isReverse = false;
640
- var elemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);
641
- var openTag = '<' + type + elemAtt + '>';
701
+ var currentElemAtt = elements[i].tagName === 'IMG' ? '' : this.domNode.attributes(elements[i]);
702
+ var openTag = '<' + type + currentElemAtt + '>';
642
703
  var closeTag = '</' + type + '>';
643
704
  var newTag = 'li';
644
705
  var replaceHTML = (elements[i].tagName.toLowerCase() === CONSTANT.DEFAULT_TAG ?
@@ -675,6 +736,9 @@ var Lists = /** @class */ (function () {
675
736
  isNOU(item) && nodes[i].parentNode.style.listStyleType !== '') {
676
737
  isRevert = false;
677
738
  }
739
+ if (nodes[i].parentNode.tagName === tagName && nodes[i].parentNode.style.listStyleType !== '') {
740
+ isRevert = true;
741
+ }
678
742
  }
679
743
  return isRevert;
680
744
  };
@@ -711,8 +775,17 @@ var Lists = /** @class */ (function () {
711
775
  };
712
776
  Lists.prototype.cleanNode = function () {
713
777
  var liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');
778
+ var listStyleType;
779
+ var firstNodeOL;
714
780
  for (var c = 0; c < liParents.length; c++) {
715
781
  var node = liParents[c];
782
+ var toFindtopOlUl = true;
783
+ if (toFindtopOlUl && (liParents[c].parentElement.parentElement.nodeName === 'OL' || liParents[c].parentElement.parentElement.nodeName === 'UL')) {
784
+ toFindtopOlUl = false;
785
+ var preElement = liParents[c].parentElement.parentElement;
786
+ listStyleType = preElement.style.listStyleType;
787
+ firstNodeOL = node.previousElementSibling;
788
+ }
716
789
  if (this.domNode.isList(node.previousElementSibling) &&
717
790
  this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {
718
791
  var contentNodes = this.domNode.contents(node);
@@ -727,6 +800,9 @@ var Lists = /** @class */ (function () {
727
800
  }
728
801
  }
729
802
  }
803
+ if (firstNodeOL) {
804
+ firstNodeOL.style.listStyleType = listStyleType;
805
+ }
730
806
  };
731
807
  Lists.prototype.findUnSelected = function (temp, elements) {
732
808
  temp = temp.slice().reverse();
@@ -787,72 +863,85 @@ var Lists = /** @class */ (function () {
787
863
  var viewNode = [];
788
864
  for (var i = 0; i < elements.length; i++) {
789
865
  var element = elements[i];
790
- if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {
791
- detach(this.domNode.contents(element)[0]);
792
- }
793
- var parentNode = elements[i].parentNode;
794
- var className = element.getAttribute('class');
795
- if (temp.length === 0) {
796
- var siblingList = elements[i].querySelectorAll('ul, ol');
797
- var firstNode = siblingList[0];
798
- if (firstNode) {
799
- var child = firstNode
800
- .querySelectorAll('li');
801
- if (child) {
802
- var nestedElement = createElement(firstNode.tagName);
803
- append([nestedElement], firstNode.parentNode);
804
- var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });
805
- append([nestedElementLI], nestedElement);
806
- append([firstNode], nestedElementLI);
807
- }
808
- }
809
- }
810
- if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),
811
- 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
812
- 'UL' === parentNode.parentNode.tagName) {
813
- element.parentNode.insertBefore(this.closeTag('LI'), element);
814
- }
815
- else {
816
- var classAttr = '';
817
- if (className) {
818
- // eslint-disable-next-line
819
- classAttr += ' class="' + className + '"';
820
- }
821
- if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {
822
- var wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
823
- ' class="' + className + ' e-rte-wrap-inner"';
824
- var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +
825
- this.domNode.attributes(parentNode) + '></' + CONSTANT.DEFAULT_TAG + '>';
826
- if (e.enterAction !== 'BR') {
827
- this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
866
+ if ((isNullOrUndefined(e.item)) || ((element.nodeName === 'LI' && e.item.listStyle === 'none'))) {
867
+ if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {
868
+ detach(this.domNode.contents(element)[0]);
869
+ }
870
+ var parentNode = elements[i].parentNode;
871
+ var className = element.getAttribute('class');
872
+ if (temp.length === 0) {
873
+ var siblingList = elements[i].querySelectorAll('ul, ol');
874
+ var firstNode = siblingList[0];
875
+ if (firstNode) {
876
+ var child = firstNode
877
+ .querySelectorAll('li');
878
+ if (child) {
879
+ var nestedElement = createElement(firstNode.tagName);
880
+ append([nestedElement], firstNode.parentNode);
881
+ var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });
882
+ append([nestedElementLI], nestedElement);
883
+ append([firstNode], nestedElementLI);
884
+ }
828
885
  }
829
886
  }
830
- else if (this.domNode.contents(element)[0].nodeType === 3) {
831
- var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));
832
- this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
833
- }
834
- else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||
835
- this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {
836
- var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);
837
- this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
887
+ if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),
888
+ 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
889
+ 'UL' === parentNode.parentNode.tagName) {
890
+ element.parentNode.insertBefore(this.closeTag('LI'), element);
838
891
  }
839
892
  else {
840
- var childNode = element.firstChild;
841
- className = childNode.getAttribute('class');
842
- attributes(childNode, this.domNode.rawAttributes(parentNode));
843
- if (className && childNode.getAttribute('class')) {
844
- attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });
893
+ var classAttr = '';
894
+ if (className) {
895
+ // eslint-disable-next-line
896
+ classAttr += ' class="' + className + '"';
845
897
  }
898
+ if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {
899
+ var wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
900
+ ' class="' + className + ' e-rte-wrap-inner"';
901
+ var parentElement = parentNode;
902
+ if (elements.length === parentElement.querySelectorAll('li').length) {
903
+ if (!isNOU(parentElement.style.listStyleType)) {
904
+ parentNode.style.removeProperty("list-style-type");
905
+ }
906
+ if (!isNOU(parentElement.style.listStyleImage)) {
907
+ parentNode.style.removeProperty("list-style-image");
908
+ }
909
+ if (parentElement.style.length === 0) {
910
+ parentNode.removeAttribute("style");
911
+ }
912
+ }
913
+ var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass + this.domNode.attributes(element) + '></' + CONSTANT.DEFAULT_TAG + '>';
914
+ if (e.enterAction !== 'BR') {
915
+ this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
916
+ }
917
+ }
918
+ else if (this.domNode.contents(element)[0].nodeType === 3) {
919
+ var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));
920
+ this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
921
+ }
922
+ else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||
923
+ this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {
924
+ var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);
925
+ this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
926
+ }
927
+ else {
928
+ var childNode = element.firstChild;
929
+ className = childNode.getAttribute('class');
930
+ attributes(childNode, this.domNode.rawAttributes(parentNode));
931
+ if (className && childNode.getAttribute('class')) {
932
+ attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });
933
+ }
934
+ }
935
+ append([this.openTag('LI')], element);
936
+ prepend([this.closeTag('LI')], element);
937
+ }
938
+ this.domNode.insertAfter(this.openTag(parentNode.tagName), element);
939
+ if (parentNode.parentNode.tagName === 'LI') {
940
+ parentNode = parentNode.parentNode.parentNode;
941
+ }
942
+ if (viewNode.indexOf(parentNode) < 0) {
943
+ viewNode.push(parentNode);
846
944
  }
847
- append([this.openTag('LI')], element);
848
- prepend([this.closeTag('LI')], element);
849
- }
850
- this.domNode.insertAfter(this.openTag(parentNode.tagName), element);
851
- if (parentNode.parentNode.tagName === 'LI') {
852
- parentNode = parentNode.parentNode.parentNode;
853
- }
854
- if (viewNode.indexOf(parentNode) < 0) {
855
- viewNode.push(parentNode);
856
945
  }
857
946
  }
858
947
  for (var i = 0; i < viewNode.length; i++) {
@@ -21,6 +21,7 @@ export declare class MsWordPaste {
21
21
  private addEventListener;
22
22
  private cropImageDimensions;
23
23
  private wordCleanup;
24
+ private addDoubleBr;
24
25
  private cleanList;
25
26
  private insertAfter;
26
27
  private findClosestListElem;
@@ -50,5 +51,7 @@ export declare class MsWordPaste {
50
51
  private getlistStyleType;
51
52
  private makeConversion;
52
53
  private getListContent;
54
+ private processMargin;
53
55
  private removeEmptyAnchorTag;
56
+ private findSource;
54
57
  }