@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
@@ -451,19 +451,6 @@ var DOMNode = /** @class */ (function () {
451
451
  var end = this.parent.querySelector('.' + markerClassName.endSelection);
452
452
  var startTextNode;
453
453
  var endTextNode;
454
- if (start.textContent === '' && isNOU(end) && action !== 'tab') {
455
- // To Do Apply Heading and Back space press in empty content.
456
- // if (isNOU(action) && save.range.startContainer.nodeType === 1 &&
457
- // (save.range.startContainer as HTMLElement).querySelectorAll('audio,video,image').length === 0) {
458
- // start.innerHTML = '<br>';
459
- // }
460
- if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {
461
- start.innerHTML = '&#65279;&#65279;<br>';
462
- }
463
- else {
464
- start.innerHTML = '&#65279;&#65279;';
465
- }
466
- }
467
454
  if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {
468
455
  var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));
469
456
  this.replaceWith(start, replace);
@@ -503,9 +490,11 @@ var DOMNode = /** @class */ (function () {
503
490
  var range = save.range;
504
491
  var startChildNodes = range.startContainer.childNodes;
505
492
  var isTableStart = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'TABLE';
493
+ var isImgOnlySelected = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'IMAGE' &&
494
+ range.endOffset === 1 && range.endContainer.nodeName === '#text' && range.endContainer.textContent.length === 0;
506
495
  var start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :
507
496
  startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || range.startContainer);
508
- var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]
497
+ var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (isImgOnlySelected ? range.endOffset : (range.endOffset - 1)) : range.endOffset]
509
498
  || range.endContainer);
510
499
  if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {
511
500
  var existNode = start.contains(end) ? start : end;
@@ -586,10 +575,13 @@ var DOMNode = /** @class */ (function () {
586
575
  else if (start.tagName === 'BR') {
587
576
  this.replaceWith(start, this.marker(className, this.encode(start.textContent)));
588
577
  var markerStart = range.startContainer.querySelector('.' + className);
589
- markerStart.appendChild(start);
578
+ if (markerStart) {
579
+ markerStart.parentElement.appendChild(start);
580
+ }
590
581
  }
591
582
  else {
592
- if (start.tagName === 'IMG') {
583
+ var tagName = !isNOU(start.parentElement) ? start.parentElement.tagName.toLocaleLowerCase() : '';
584
+ if (start.tagName === 'IMG' && tagName !== 'p' && tagName !== 'div') {
593
585
  var parNode = document.createElement('p');
594
586
  start.parentElement.insertBefore(parNode, start);
595
587
  parNode.appendChild(start);
@@ -679,11 +671,12 @@ var DOMNode = /** @class */ (function () {
679
671
  /**
680
672
  * blockNodes method
681
673
  *
674
+ * @param {boolean} action - Optional Boolean that specifies the action is whether performed.
682
675
  * @returns {Node[]} - returns the node array values
683
676
  * @hidden
684
677
  * @deprecated
685
678
  */
686
- DOMNode.prototype.blockNodes = function () {
679
+ DOMNode.prototype.blockNodes = function (action) {
687
680
  var collectionNodes = [];
688
681
  var selection = this.getSelection();
689
682
  if (this.isEditorArea() && selection.rangeCount) {
@@ -697,23 +690,46 @@ var DOMNode = /** @class */ (function () {
697
690
  collectionNodes.push(startNode);
698
691
  }
699
692
  parentNode = this.blockParentNode(startNode);
693
+ var endParentNode = this.blockParentNode(endNode);
700
694
  if (parentNode && collectionNodes.indexOf(parentNode) < 0) {
701
- if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||
702
- startNode.nodeType === Node.TEXT_NODE ||
703
- startNode.classList.contains(markerClassName.startSelection) ||
704
- startNode.classList.contains(markerClassName.endSelection))) {
705
- var tempNode = startNode.previousSibling &&
706
- startNode.previousSibling.nodeType === Node.TEXT_NODE ?
707
- startNode.previousSibling : startNode;
708
- if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {
709
- collectionNodes.push(tempNode);
695
+ if (!isNOU(action) && action) {
696
+ if (range.commonAncestorContainer.nodeName === 'TD' || parentNode.nodeName === 'TD' || endParentNode.nodeName === 'TD') {
697
+ var processedNodes = this.getPreBlockNodeCollection(range);
698
+ if (processedNodes.length > 1) {
699
+ this.wrapWithBlockNode(processedNodes, collectionNodes);
700
+ }
701
+ else if (processedNodes.length > 0) {
702
+ if (startNode !== endNode && startNode.nodeName !== 'BR') {
703
+ collectionNodes.push(this.createTempNode(startNode));
704
+ }
705
+ else if (startNode === endNode && startNode.nodeName === 'SPAN' && (startNode.classList.contains(markerClassName.startSelection)
706
+ || startNode.classList.contains(markerClassName.endSelection))) {
707
+ collectionNodes.push(this.createTempNode(startNode));
708
+ }
709
+ }
710
710
  }
711
711
  else {
712
- collectionNodes.push(this.createTempNode(tempNode));
712
+ collectionNodes.push(parentNode);
713
713
  }
714
714
  }
715
715
  else {
716
- collectionNodes.push(parentNode);
716
+ if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||
717
+ startNode.nodeType === Node.TEXT_NODE ||
718
+ startNode.classList.contains(markerClassName.startSelection) ||
719
+ startNode.classList.contains(markerClassName.endSelection))) {
720
+ var tempNode = startNode.previousSibling &&
721
+ startNode.previousSibling.nodeType === Node.TEXT_NODE ?
722
+ startNode.previousSibling : startNode;
723
+ if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {
724
+ collectionNodes.push(tempNode);
725
+ }
726
+ else {
727
+ collectionNodes.push(this.createTempNode(tempNode));
728
+ }
729
+ }
730
+ else {
731
+ collectionNodes.push(parentNode);
732
+ }
717
733
  }
718
734
  }
719
735
  var nodes = [];
@@ -782,6 +798,131 @@ var DOMNode = /** @class */ (function () {
782
798
  DOMNode.prototype.ignoreTableTag = function (element) {
783
799
  return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);
784
800
  };
801
+ DOMNode.prototype.getPreBlockNodeCollection = function (range) {
802
+ var startNode = this.getSelectedNode(range.startContainer, range.startOffset);
803
+ var endNode = this.getSelectedNode(range.endContainer, range.endOffset);
804
+ var nodes = [];
805
+ var rootNode = startNode.closest('td, th');
806
+ if (isNOU(rootNode)) {
807
+ return nodes;
808
+ }
809
+ var rootChildNode = Array.from(rootNode.childNodes);
810
+ var isContinue = true;
811
+ var processedStart = this.getClosestInlineParent(startNode, rootNode, true);
812
+ var processedEnd = this.getClosestInlineParent(endNode, rootNode, false);
813
+ for (var i = 0; i < rootChildNode.length; i++) {
814
+ var child = rootChildNode[i];
815
+ if (processedStart === processedEnd && child === processedStart) {
816
+ nodes.push(child);
817
+ isContinue = true;
818
+ }
819
+ else if (child === processedStart) {
820
+ isContinue = false;
821
+ }
822
+ else if (child === processedEnd) {
823
+ nodes.push(child); // Early Exit so Push the end node.
824
+ isContinue = true;
825
+ }
826
+ if (isContinue) {
827
+ continue;
828
+ }
829
+ else {
830
+ nodes.push(child);
831
+ }
832
+ }
833
+ return nodes;
834
+ };
835
+ DOMNode.prototype.getClosestInlineParent = function (node, rootNode, isStart) {
836
+ // 1. If the node is a text node, return the node
837
+ // 2. If the node is a block node return block node
838
+ // 3. If the node is a inline node,
839
+ // Traverse back untill the TD or TH node
840
+ // Check if the the previous sibling , next sibling is a block node.
841
+ // If yes return the inline node that is closest to the block node.
842
+ if (node.nodeType === Node.TEXT_NODE) {
843
+ return node;
844
+ }
845
+ if (this.isBlockNode(node)) {
846
+ return node;
847
+ }
848
+ var currentNode = node;
849
+ var rootFlag = false;
850
+ while (currentNode) {
851
+ var previousNode = currentNode;
852
+ if (rootFlag) {
853
+ if (this.isBlockNode(currentNode)) {
854
+ return previousNode;
855
+ }
856
+ if (isStart && currentNode.previousSibling) {
857
+ if (this.isBlockNode(currentNode.previousSibling) || currentNode.previousSibling.nodeName === 'BR') {
858
+ return previousNode;
859
+ }
860
+ else {
861
+ currentNode = currentNode.previousSibling;
862
+ }
863
+ }
864
+ else if (!isStart && currentNode.nextSibling) {
865
+ if (this.isBlockNode(currentNode.nextSibling) || currentNode.nextSibling.nodeName === 'BR') {
866
+ return previousNode;
867
+ }
868
+ else {
869
+ currentNode = currentNode.nextSibling;
870
+ }
871
+ }
872
+ else {
873
+ return currentNode;
874
+ }
875
+ }
876
+ else {
877
+ currentNode = currentNode.parentElement;
878
+ if (currentNode === rootNode) {
879
+ currentNode = previousNode;
880
+ rootFlag = true;
881
+ }
882
+ }
883
+ }
884
+ return null;
885
+ };
886
+ DOMNode.prototype.wrapWithBlockNode = function (nodes, collectionNodes) {
887
+ var wrapperElement = createElement('p');
888
+ for (var i = 0; i < nodes.length; i++) {
889
+ var child = nodes[i];
890
+ if (child.nodeName === 'BR') {
891
+ child.parentNode.insertBefore(wrapperElement, child);
892
+ wrapperElement.appendChild(child);
893
+ if (wrapperElement.childNodes.length > 0) {
894
+ collectionNodes.push(wrapperElement);
895
+ }
896
+ wrapperElement = createElement('p');
897
+ }
898
+ else {
899
+ if (!this.isBlockNode(child)) {
900
+ if (child.nodeName === '#text' && child.textContent.trim() === '') {
901
+ continue;
902
+ }
903
+ if (wrapperElement.childElementCount === 0) {
904
+ child.parentNode.insertBefore(wrapperElement, child);
905
+ wrapperElement.appendChild(child);
906
+ }
907
+ else {
908
+ wrapperElement.appendChild(child);
909
+ }
910
+ }
911
+ else {
912
+ collectionNodes.push(child);
913
+ }
914
+ // Use case when the BR is next sibling but the BR is not the part of selection.
915
+ if ((i === nodes.length - 1) && wrapperElement.nextElementSibling &&
916
+ wrapperElement.querySelectorAll('br').length === 0 &&
917
+ wrapperElement.nextElementSibling.nodeName === 'BR') {
918
+ wrapperElement.appendChild(wrapperElement.nextElementSibling);
919
+ }
920
+ }
921
+ }
922
+ if (wrapperElement.childNodes.length > 0 && collectionNodes.indexOf(wrapperElement) < 0) {
923
+ collectionNodes.push(wrapperElement);
924
+ }
925
+ };
785
926
  return DOMNode;
786
927
  }());
787
928
  export { DOMNode };
@@ -35,6 +35,7 @@ export declare class FormatPainterActions implements IFormatPainterEditor {
35
35
  private validateELementTag;
36
36
  private findCurrentContext;
37
37
  private insertFormatNode;
38
+ private isListCopied;
38
39
  private insertBlockNode;
39
40
  private insertNewList;
40
41
  private insertSameList;
@@ -174,7 +174,7 @@ var FormatPainterActions = /** @class */ (function () {
174
174
  };
175
175
  FormatPainterActions.prototype.copyAction = function () {
176
176
  var copyCollection = [];
177
- var range = this.parent.nodeSelection.getRange(document);
177
+ var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
178
178
  var domSelection = this.parent.nodeSelection;
179
179
  var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :
180
180
  domSelection.getSelectionNodeCollectionBr(range);
@@ -363,6 +363,14 @@ var FormatPainterActions = /** @class */ (function () {
363
363
  var range = this.parent.nodeSelection.getRange(docElement);
364
364
  var isCollapsed = range.collapsed;
365
365
  var blockNodes = this.parent.domNode.blockNodes();
366
+ var isListCopied = this.isListCopied();
367
+ if (isListCopied) {
368
+ for (var i = 0; i < blockNodes.length; i++) {
369
+ if (closest(blockNodes[i], 'li')) {
370
+ blockNodes[i] = closest(blockNodes[i], 'li');
371
+ }
372
+ }
373
+ }
366
374
  var isFullNodeSelected = false;
367
375
  if (blockNodes.length === 1) {
368
376
  isFullNodeSelected = blockNodes[0].textContent.trim() === range.toString().trim();
@@ -371,6 +379,16 @@ var FormatPainterActions = /** @class */ (function () {
371
379
  this.insertBlockNode(clonedElem, range, docElement, blockNodes);
372
380
  }
373
381
  };
382
+ FormatPainterActions.prototype.isListCopied = function () {
383
+ var isListCopied = false;
384
+ for (var i = 0; i < this.copyCollection.length; i++) {
385
+ if (this.copyCollection[i].tagName === 'OL' || this.copyCollection[i].tagName === 'UL') {
386
+ isListCopied = true;
387
+ break;
388
+ }
389
+ }
390
+ return isListCopied;
391
+ };
374
392
  FormatPainterActions.prototype.insertBlockNode = function (element, range, docElement, nodes) {
375
393
  var domSelection = this.parent.nodeSelection;
376
394
  var saveSelection = domSelection.save(range, docElement);
@@ -18,6 +18,7 @@ export declare class Formats {
18
18
  private addEventListener;
19
19
  private getParentNode;
20
20
  private onKeyUp;
21
+ private getBlockParent;
21
22
  private onKeyDown;
22
23
  private removeCodeContent;
23
24
  private deleteContent;
@@ -52,6 +52,14 @@ var Formats = /** @class */ (function () {
52
52
  }
53
53
  }
54
54
  };
55
+ Formats.prototype.getBlockParent = function (node, endNode) {
56
+ var currentParent;
57
+ while (node != endNode) {
58
+ currentParent = node;
59
+ node = node.parentElement;
60
+ }
61
+ return currentParent;
62
+ };
55
63
  Formats.prototype.onKeyDown = function (e) {
56
64
  if (e.event.which === 13) {
57
65
  var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
@@ -61,6 +69,8 @@ var Formats = /** @class */ (function () {
61
69
  ? range.endContainer : range.endContainer.parentElement;
62
70
  var preElem = closest(startCon, 'pre');
63
71
  var endPreElem = closest(endCon, 'pre');
72
+ var blockquoteEle = closest(startCon, 'blockquote');
73
+ var endBlockquoteEle = closest(endCon, 'blockquote');
64
74
  var liParent = !isNOU(preElem) && !isNOU(preElem.parentElement) && preElem.parentElement.tagName === 'LI';
65
75
  if (liParent) {
66
76
  return;
@@ -72,6 +82,17 @@ var Formats = /** @class */ (function () {
72
82
  range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
73
83
  this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, endCon, 0);
74
84
  }
85
+ if (e.event.which === 13 && ((!isNOU(blockquoteEle) && !isNOU(endBlockquoteEle)) || (!isNOU(blockquoteEle) && isNOU(endBlockquoteEle)))) {
86
+ var startParent = this.getBlockParent(range.startContainer, blockquoteEle);
87
+ if ((startParent.textContent.charCodeAt(0) === 8203 &&
88
+ startParent.textContent.length === 1) || startParent.textContent.length === 0) {
89
+ if (isNOU(startParent.nextSibling) && ((startParent.previousSibling.textContent.charCodeAt(0) === 8203 &&
90
+ startParent.previousSibling.textContent.length === 1) || startParent.previousSibling.textContent.length === 0)) {
91
+ e.event.preventDefault();
92
+ this.paraFocus(startParent.parentElement); //Revert from blockquotes while pressing enter key
93
+ }
94
+ }
95
+ }
75
96
  if (e.event.which === 13 && !isNOU(preElem) && !isNOU(endPreElem)) {
76
97
  e.event.preventDefault();
77
98
  this.deleteContent(range);
@@ -221,7 +242,7 @@ var Formats = /** @class */ (function () {
221
242
  }
222
243
  var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);
223
244
  this.parent.domNode.setMarker(save);
224
- var formatsNodes = this.parent.domNode.blockNodes();
245
+ var formatsNodes = this.parent.domNode.blockNodes(true);
225
246
  if (e.enterAction === 'BR') {
226
247
  this.setSelectionBRConfig();
227
248
  var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);
@@ -295,7 +316,7 @@ var Formats = /** @class */ (function () {
295
316
  replaceHTML = parentNode.innerHTML;
296
317
  }
297
318
  if ((e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&
298
- (e.subCommand.toLowerCase() !== 'pre' ||
319
+ (e.subCommand.toLowerCase() !== 'pre' && e.subCommand.toLowerCase() !== 'blockquote' ||
299
320
  (!isNOU(e.exeValue) && e.exeValue.name === 'dropDownSelect'))) ||
300
321
  isNOU(parentNode.parentNode) ||
301
322
  (parentNode.tagName === 'TABLE' && e.subCommand.toLowerCase() === 'pre')) {
@@ -304,7 +325,21 @@ var Formats = /** @class */ (function () {
304
325
  this.cleanFormats(parentNode, e.subCommand);
305
326
  var replaceNode = (e.subCommand.toLowerCase() === 'pre' && parentNode.tagName.toLowerCase() === 'pre') ?
306
327
  'p' : e.subCommand;
307
- var replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\s+</g, '><'));
328
+ var isToggleBlockquoteList = e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&
329
+ e.subCommand.toLowerCase() === 'blockquote' && this.parent.domNode.isList(parentNode.firstElementChild);
330
+ var isToggleBlockquote = e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase()
331
+ && e.subCommand.toLowerCase() === 'blockquote';
332
+ var replaceTag = void 0;
333
+ if (isToggleBlockquoteList) {
334
+ replaceTag = replaceHTML.replace(/>\s+</g, '><');
335
+ }
336
+ else if (isToggleBlockquote) {
337
+ var tagWrap = (e.enterAction == 'BR' || e.enterAction == 'P') ? 'P' : e.enterAction;
338
+ replaceTag = this.parent.domNode.createTagString(tagWrap, parentNode, replaceHTML.replace(/>\s+</g, '><'));
339
+ }
340
+ else {
341
+ replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\s+</g, '><'));
342
+ }
308
343
  if (parentNode.tagName === 'LI') {
309
344
  parentNode.innerHTML = '';
310
345
  parentNode.insertAdjacentHTML('beforeend', replaceTag);
@@ -79,13 +79,12 @@ var ImageCommand = /** @class */ (function () {
79
79
  }
80
80
  };
81
81
  ImageCommand.prototype.createImage = function (e) {
82
- var _this = this;
83
82
  var isReplaced = false;
84
83
  e.item.url = isNOU(e.item.url) || e.item.url === 'undefined' ? e.item.src : e.item.url;
85
84
  if (!isNOU(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {
86
85
  var imgEle = e.item.selectParent[0];
87
- this.setStyle(imgEle, e);
88
86
  isReplaced = true;
87
+ this.setStyle(imgEle, e, isReplaced);
89
88
  }
90
89
  else {
91
90
  var imgElement = createElement('img');
@@ -109,24 +108,43 @@ var ImageCommand = /** @class */ (function () {
109
108
  var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];
110
109
  var imgElm_1 = (e.value === 'Replace' || isReplaced) ? e.item.selectParent[0] :
111
110
  (Browser.isIE ? selectedNode.previousSibling : selectedNode.previousElementSibling);
112
- imgElm_1.addEventListener('load', function () {
113
- if (e.value !== 'Replace' || !isReplaced) {
114
- e.callBack({
115
- requestType: 'Images',
116
- editorMode: 'HTML',
117
- event: e.event,
118
- range: _this.parent.nodeSelection.getRange(_this.parent.currentDocument),
119
- elements: [imgElm_1]
120
- });
121
- }
122
- });
111
+ var imageInstance_1 = this;
112
+ var onImageLoadEvent_1 = function () {
113
+ e.callBack({
114
+ requestType: (e.value === 'Replace') ? (e.item.subCommand = 'Replace', "Replace") : 'Images',
115
+ editorMode: 'HTML',
116
+ event: e.event,
117
+ range: imageInstance_1.parent.nodeSelection.getRange(imageInstance_1.parent.currentDocument),
118
+ elements: [imgElm_1]
119
+ });
120
+ imgElm_1.removeEventListener('load', onImageLoadEvent_1);
121
+ };
122
+ imgElm_1.addEventListener('load', onImageLoadEvent_1);
123
123
  }
124
124
  };
125
- ImageCommand.prototype.setStyle = function (imgElement, e) {
125
+ ImageCommand.prototype.setStyle = function (imgElement, e, imgReplace) {
126
126
  if (!isNOU(e.item.url)) {
127
127
  imgElement.setAttribute('src', e.item.url);
128
128
  }
129
- imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass));
129
+ var alignClassName;
130
+ if (imgReplace) {
131
+ var alignClass = {
132
+ 'e-imgcenter': 'e-imgcenter',
133
+ 'e-imgright': 'e-imgright',
134
+ 'e-imgleft': 'e-imgleft'
135
+ };
136
+ var imgClassList = imgElement.classList;
137
+ var classArray = [];
138
+ for (var i = 0; i < imgClassList.length; i++) {
139
+ // eslint-disable-next-line
140
+ if (!isNOU(alignClass[imgClassList[i]])) {
141
+ // eslint-disable-next-line
142
+ alignClassName = alignClass[imgClassList[i]];
143
+ }
144
+ }
145
+ }
146
+ imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass)
147
+ + (isNOU(alignClassName) ? '' : ' ' + alignClassName));
130
148
  if (!isNOU(e.item.altText)) {
131
149
  imgElement.setAttribute('alt', e.item.altText);
132
150
  }
@@ -178,6 +196,9 @@ var ImageCommand = /** @class */ (function () {
178
196
  if (!isNOU(e.item.target)) {
179
197
  anchor.setAttribute('target', e.item.target);
180
198
  }
199
+ if (!isNOU(e.item.ariaLabel)) {
200
+ anchor.setAttribute('aria-label', e.item.ariaLabel);
201
+ }
181
202
  InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);
182
203
  this.callBack(e);
183
204
  };
@@ -209,9 +230,11 @@ var ImageCommand = /** @class */ (function () {
209
230
  e.item.selectNode[0].parentElement.href = e.item.url;
210
231
  if (isNOU(e.item.target)) {
211
232
  e.item.selectNode[0].parentElement.removeAttribute('target');
233
+ e.item.selectNode[0].parentElement.removeAttribute('aria-label');
212
234
  }
213
235
  else {
214
236
  e.item.selectNode[0].parentElement.target = e.item.target;
237
+ e.item.selectNode[0].parentElement.ariaLabel = e.item.ariaLabel;
215
238
  }
216
239
  this.callBack(e);
217
240
  };
@@ -81,7 +81,7 @@ var Indents = /** @class */ (function () {
81
81
  isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);
82
82
  }
83
83
  else {
84
- indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';
84
+ indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px' || marginLeftOrRight === '0in') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';
85
85
  isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);
86
86
  /* eslint-enable */
87
87
  }
@@ -26,4 +26,5 @@ export declare class InsertHtml {
26
26
  private static findDetachEmptyElem;
27
27
  private static removeEmptyElements;
28
28
  private static closestEle;
29
+ private static insertTableInList;
29
30
  }