@syncfusion/ej2-richtexteditor 24.2.7 → 24.2.9

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 (78) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/ej2-richtexteditor.min.js +2 -2
  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 +341 -157
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +342 -156
  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 +8 -8
  13. package/src/editor-manager/plugin/dom-node.js +3 -1
  14. package/src/editor-manager/plugin/format-painter-actions.d.ts +1 -0
  15. package/src/editor-manager/plugin/format-painter-actions.js +18 -0
  16. package/src/editor-manager/plugin/inserthtml.js +9 -1
  17. package/src/editor-manager/plugin/lists.js +79 -70
  18. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -0
  19. package/src/editor-manager/plugin/ms-word-clean-up.js +22 -1
  20. package/src/rich-text-editor/actions/base-quick-toolbar.js +5 -2
  21. package/src/rich-text-editor/actions/color-picker.d.ts +1 -0
  22. package/src/rich-text-editor/actions/color-picker.js +10 -0
  23. package/src/rich-text-editor/actions/emoji-picker.js +1 -1
  24. package/src/rich-text-editor/actions/enter-key.js +2 -2
  25. package/src/rich-text-editor/actions/html-editor.js +10 -5
  26. package/src/rich-text-editor/actions/quick-toolbar.js +1 -1
  27. package/src/rich-text-editor/actions/toolbar.js +3 -0
  28. package/src/rich-text-editor/base/constant.d.ts +5 -0
  29. package/src/rich-text-editor/base/constant.js +5 -0
  30. package/src/rich-text-editor/base/rich-text-editor.js +21 -5
  31. package/src/rich-text-editor/models/default-locale.js +1 -1
  32. package/src/rich-text-editor/renderer/dialog-renderer.js +5 -1
  33. package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
  34. package/src/rich-text-editor/renderer/image-module.js +28 -7
  35. package/src/rich-text-editor/renderer/table-module.d.ts +3 -1
  36. package/src/rich-text-editor/renderer/table-module.js +111 -50
  37. package/src/rich-text-editor/renderer/toolbar-renderer.js +13 -13
  38. package/styles/bootstrap-dark.css +32 -13
  39. package/styles/bootstrap.css +36 -20
  40. package/styles/bootstrap4.css +18 -3
  41. package/styles/bootstrap5-dark.css +22 -9
  42. package/styles/bootstrap5.css +22 -9
  43. package/styles/fabric-dark.css +18 -3
  44. package/styles/fabric.css +18 -3
  45. package/styles/fluent-dark.css +24 -3
  46. package/styles/fluent.css +24 -3
  47. package/styles/highcontrast-light.css +18 -3
  48. package/styles/highcontrast.css +21 -3
  49. package/styles/material-dark.css +22 -3
  50. package/styles/material.css +22 -3
  51. package/styles/material3-dark.css +19 -4
  52. package/styles/material3.css +19 -4
  53. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +8 -8
  54. package/styles/rich-text-editor/_bootstrap-definition.scss +14 -14
  55. package/styles/rich-text-editor/_layout.scss +11 -0
  56. package/styles/rich-text-editor/_material3-definition.scss +1 -1
  57. package/styles/rich-text-editor/_theme.scss +47 -13
  58. package/styles/rich-text-editor/bootstrap-dark.css +32 -13
  59. package/styles/rich-text-editor/bootstrap.css +36 -20
  60. package/styles/rich-text-editor/bootstrap4.css +18 -3
  61. package/styles/rich-text-editor/bootstrap5-dark.css +22 -9
  62. package/styles/rich-text-editor/bootstrap5.css +22 -9
  63. package/styles/rich-text-editor/fabric-dark.css +18 -3
  64. package/styles/rich-text-editor/fabric.css +18 -3
  65. package/styles/rich-text-editor/fluent-dark.css +24 -3
  66. package/styles/rich-text-editor/fluent.css +24 -3
  67. package/styles/rich-text-editor/highcontrast-light.css +18 -3
  68. package/styles/rich-text-editor/highcontrast.css +21 -3
  69. package/styles/rich-text-editor/material-dark.css +22 -3
  70. package/styles/rich-text-editor/material.css +22 -3
  71. package/styles/rich-text-editor/material3-dark.css +19 -4
  72. package/styles/rich-text-editor/material3.css +19 -4
  73. package/styles/rich-text-editor/tailwind-dark.css +30 -3
  74. package/styles/rich-text-editor/tailwind.css +30 -3
  75. package/styles/tailwind-dark.css +30 -3
  76. package/styles/tailwind.css +30 -3
  77. package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -41
  78. package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -27
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 24.2.7
3
+ * version : 24.2.9
4
4
  * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-richtexteditor@*",
3
- "_id": "@syncfusion/ej2-richtexteditor@24.2.4",
3
+ "_id": "@syncfusion/ej2-richtexteditor@24.2.8",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-gxGUXVmOFE1abnbYaLzzX3FEGyT+H3uIhWIt0jS7DALyg61NbYz8XViClAoYz62KxDenDXYzu+HyP5bjpMc7gg==",
5
+ "_integrity": "sha512-RiTlxXAeoPOeO3I9n1A4XHgDuna06LrHQgt08fEpnjhBE38mAzyH68yRzCtrUlVnoVqTPOvJJ83rLI2VDDlC1w==",
6
6
  "_location": "/@syncfusion/ej2-richtexteditor",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -25,8 +25,8 @@
25
25
  "/@syncfusion/ej2-react-richtexteditor",
26
26
  "/@syncfusion/ej2-vue-richtexteditor"
27
27
  ],
28
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-24.2.4.tgz",
29
- "_shasum": "c1a662b91702ceddbdb9a858bae8cdccb2635ea7",
28
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-24.2.8.tgz",
29
+ "_shasum": "f966e83e1230cc284396b8ec962f1df25c80d5a9",
30
30
  "_spec": "@syncfusion/ej2-richtexteditor@*",
31
31
  "_where": "/jenkins/workspace/elease-automation_release_24.1.1/packages/included",
32
32
  "author": {
@@ -40,9 +40,9 @@
40
40
  "@syncfusion/ej2-base": "~24.2.7",
41
41
  "@syncfusion/ej2-buttons": "~24.2.7",
42
42
  "@syncfusion/ej2-filemanager": "~24.2.7",
43
- "@syncfusion/ej2-inputs": "~24.2.7",
44
- "@syncfusion/ej2-navigations": "~24.2.4",
45
- "@syncfusion/ej2-popups": "~24.2.5",
43
+ "@syncfusion/ej2-inputs": "~24.2.9",
44
+ "@syncfusion/ej2-navigations": "~24.2.8",
45
+ "@syncfusion/ej2-popups": "~24.2.9",
46
46
  "@syncfusion/ej2-splitbuttons": "~24.2.7"
47
47
  },
48
48
  "deprecated": false,
@@ -69,6 +69,6 @@
69
69
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
70
70
  },
71
71
  "typings": "index.d.ts",
72
- "version": "24.2.7",
72
+ "version": "24.2.9",
73
73
  "sideEffects": false
74
74
  }
@@ -490,9 +490,11 @@ var DOMNode = /** @class */ (function () {
490
490
  var range = save.range;
491
491
  var startChildNodes = range.startContainer.childNodes;
492
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;
493
495
  var start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :
494
496
  startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || range.startContainer);
495
- 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]
496
498
  || range.endContainer);
497
499
  if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {
498
500
  var existNode = start.contains(end) ? start : end;
@@ -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;
@@ -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);
@@ -211,7 +211,12 @@ var InsertHtml = /** @class */ (function () {
211
211
  CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))
212
212
  || (node.nodeName.toLowerCase() === 'table' && closestParentNode &&
213
213
  CONSTANT.TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {
214
- preNode = nodeCutter.GetSpliceNode(range, closestParentNode);
214
+ if (isCollapsed) {
215
+ preNode = nodeCutter.SplitNode(range, closestParentNode, true);
216
+ }
217
+ else {
218
+ preNode = nodeCutter.SplitNode(range, closestParentNode, false);
219
+ }
215
220
  sibNode = isNOU(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
216
221
  if (nodes.length === 1) {
217
222
  nodeSelection.setSelectionContents(docElement, preNode);
@@ -298,6 +303,9 @@ var InsertHtml = /** @class */ (function () {
298
303
  var paraElm = void 0;
299
304
  var previousParent = void 0;
300
305
  if (!this.contentsDeleted) {
306
+ if (!isCollapsed && range.startContainer.parentElement.textContent.length === 0 && range.startContainer.nodeName === 'BR' && range.startContainer.parentElement.nodeName === 'P') {
307
+ editNode.removeChild(range.startContainer.parentElement);
308
+ }
301
309
  range.deleteContents();
302
310
  }
303
311
  while (node.firstChild) {
@@ -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
  }
@@ -190,11 +197,11 @@ var Lists = /** @class */ (function () {
190
197
  };
191
198
  Lists.prototype.removeList = function (range, e) {
192
199
  var startNode = this.parent.domNode.getSelectedNode(range.startContainer, range.startOffset);
193
- var endNode = this.parent.domNode.getSelectedNode(range.endContainer, range.endOffset);
200
+ 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);
194
201
  startNode = startNode.nodeName === 'BR' ? startNode.parentElement : startNode;
195
202
  endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
196
203
  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;
204
+ endNode = endNode.nodeName !== 'LI' && endNode.nodeName !== '#text' && !isNOU(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
198
205
  if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
199
206
  isNOU(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
200
207
  isNOU(startNode.previousElementSibling) && range.startOffset === 0) ||
@@ -600,7 +607,7 @@ var Lists = /** @class */ (function () {
600
607
  };
601
608
  Lists.prototype.applyLists = function (elements, type, selector, item, e) {
602
609
  var isReverse = true;
603
- if (this.isRevert(elements, type, item) && isNOU(item)) {
610
+ if (this.isRevert(elements, type, item) && isNOU(item) || (!isNOU(item) && item.listStyle === 'none')) {
604
611
  this.revertList(elements, e);
605
612
  this.removeEmptyListElements();
606
613
  }
@@ -790,82 +797,84 @@ var Lists = /** @class */ (function () {
790
797
  var viewNode = [];
791
798
  for (var i = 0; i < elements.length; i++) {
792
799
  var element = elements[i];
793
- if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {
794
- detach(this.domNode.contents(element)[0]);
795
- }
796
- var parentNode = elements[i].parentNode;
797
- var className = element.getAttribute('class');
798
- if (temp.length === 0) {
799
- var siblingList = elements[i].querySelectorAll('ul, ol');
800
- var firstNode = siblingList[0];
801
- if (firstNode) {
802
- var child = firstNode
803
- .querySelectorAll('li');
804
- if (child) {
805
- var nestedElement = createElement(firstNode.tagName);
806
- append([nestedElement], firstNode.parentNode);
807
- var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });
808
- append([nestedElementLI], nestedElement);
809
- append([firstNode], nestedElementLI);
800
+ if ((isNullOrUndefined(e.item)) || ((element.nodeName === 'LI' && e.item.listStyle === 'none'))) {
801
+ if (this.domNode.contents(element)[0].nodeType === 3 && this.domNode.contents(element)[0].textContent.trim().length === 0) {
802
+ detach(this.domNode.contents(element)[0]);
803
+ }
804
+ var parentNode = elements[i].parentNode;
805
+ var className = element.getAttribute('class');
806
+ if (temp.length === 0) {
807
+ var siblingList = elements[i].querySelectorAll('ul, ol');
808
+ var firstNode = siblingList[0];
809
+ if (firstNode) {
810
+ var child = firstNode
811
+ .querySelectorAll('li');
812
+ if (child) {
813
+ var nestedElement = createElement(firstNode.tagName);
814
+ append([nestedElement], firstNode.parentNode);
815
+ var nestedElementLI = createElement('li', { styles: 'list-style-type: none;' });
816
+ append([nestedElementLI], nestedElement);
817
+ append([firstNode], nestedElementLI);
818
+ }
810
819
  }
811
820
  }
812
- }
813
- if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),
814
- 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
815
- 'UL' === parentNode.parentNode.tagName) {
816
- element.parentNode.insertBefore(this.closeTag('LI'), element);
817
- }
818
- else {
819
- var classAttr = '';
820
- if (className) {
821
- // eslint-disable-next-line
822
- classAttr += ' class="' + className + '"';
823
- }
824
- if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {
825
- var wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
826
- ' class="' + className + ' e-rte-wrap-inner"';
827
- var parentElement = parentNode;
828
- if (!isNOU(parentElement.style.listStyleType)) {
829
- parentNode.style.removeProperty("list-style-type");
821
+ if (element.parentNode.insertBefore(this.closeTag(parentNode.tagName), element),
822
+ 'LI' === parentNode.parentNode.tagName || 'OL' === parentNode.parentNode.tagName ||
823
+ 'UL' === parentNode.parentNode.tagName) {
824
+ element.parentNode.insertBefore(this.closeTag('LI'), element);
825
+ }
826
+ else {
827
+ var classAttr = '';
828
+ if (className) {
829
+ // eslint-disable-next-line
830
+ classAttr += ' class="' + className + '"';
830
831
  }
831
- if (!isNOU(parentElement.style.listStyleImage)) {
832
- parentNode.style.removeProperty("list-style-image");
832
+ if (CONSTANT.DEFAULT_TAG && 0 === element.querySelectorAll(CONSTANT.BLOCK_TAGS.join(', ')).length) {
833
+ var wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
834
+ ' class="' + className + ' e-rte-wrap-inner"';
835
+ var parentElement = parentNode;
836
+ if (!isNOU(parentElement.style.listStyleType)) {
837
+ parentNode.style.removeProperty("list-style-type");
838
+ }
839
+ if (!isNOU(parentElement.style.listStyleImage)) {
840
+ parentNode.style.removeProperty("list-style-image");
841
+ }
842
+ if (parentElement.style.length === 0) {
843
+ parentNode.removeAttribute("style");
844
+ }
845
+ var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +
846
+ this.domNode.attributes(parentElement) + '></' + CONSTANT.DEFAULT_TAG + '>';
847
+ if (e.enterAction !== 'BR') {
848
+ this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
849
+ }
833
850
  }
834
- if (parentElement.style.length === 0) {
835
- parentNode.removeAttribute("style");
851
+ else if (this.domNode.contents(element)[0].nodeType === 3) {
852
+ var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));
853
+ this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
836
854
  }
837
- var wrapper = '<' + CONSTANT.DEFAULT_TAG + wrapperclass +
838
- this.domNode.attributes(parentElement) + '></' + CONSTANT.DEFAULT_TAG + '>';
839
- if (e.enterAction !== 'BR') {
840
- this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
855
+ else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||
856
+ this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {
857
+ var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);
858
+ this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
841
859
  }
860
+ else {
861
+ var childNode = element.firstChild;
862
+ className = childNode.getAttribute('class');
863
+ attributes(childNode, this.domNode.rawAttributes(parentNode));
864
+ if (className && childNode.getAttribute('class')) {
865
+ attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });
866
+ }
867
+ }
868
+ append([this.openTag('LI')], element);
869
+ prepend([this.closeTag('LI')], element);
842
870
  }
843
- else if (this.domNode.contents(element)[0].nodeType === 3) {
844
- var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.parent.domNode.encode(this.domNode.contents(element)[0].textContent));
845
- this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
846
- }
847
- else if (this.domNode.contents(element)[0].classList.contains(markerClassName.startSelection) ||
848
- this.domNode.contents(element)[0].classList.contains(markerClassName.endSelection)) {
849
- var replace = this.domNode.createTagString(CONSTANT.DEFAULT_TAG, parentNode, this.domNode.contents(element)[0].outerHTML);
850
- this.domNode.replaceWith(this.domNode.contents(element)[0], replace);
871
+ this.domNode.insertAfter(this.openTag(parentNode.tagName), element);
872
+ if (parentNode.parentNode.tagName === 'LI') {
873
+ parentNode = parentNode.parentNode.parentNode;
851
874
  }
852
- else {
853
- var childNode = element.firstChild;
854
- className = childNode.getAttribute('class');
855
- attributes(childNode, this.domNode.rawAttributes(parentNode));
856
- if (className && childNode.getAttribute('class')) {
857
- attributes(childNode, { 'class': className + ' ' + childNode.getAttribute('class') });
858
- }
875
+ if (viewNode.indexOf(parentNode) < 0) {
876
+ viewNode.push(parentNode);
859
877
  }
860
- append([this.openTag('LI')], element);
861
- prepend([this.closeTag('LI')], element);
862
- }
863
- this.domNode.insertAfter(this.openTag(parentNode.tagName), element);
864
- if (parentNode.parentNode.tagName === 'LI') {
865
- parentNode = parentNode.parentNode.parentNode;
866
- }
867
- if (viewNode.indexOf(parentNode) < 0) {
868
- viewNode.push(parentNode);
869
878
  }
870
879
  }
871
880
  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;
@@ -1,5 +1,5 @@
1
1
  import * as EVENTS from '../../common/constant';
2
- import { createElement, isNullOrUndefined as isNOU, detach, addClass } from '@syncfusion/ej2-base';
2
+ import { createElement, isNullOrUndefined as isNOU, detach, addClass, Browser } from '@syncfusion/ej2-base';
3
3
  import { PASTE_SOURCE } from '../base/constant';
4
4
  /**
5
5
  * PasteCleanup for MsWord content
@@ -61,6 +61,7 @@ var MsWordPaste = /** @class */ (function () {
61
61
  var elm = createElement('p');
62
62
  elm.setAttribute('id', 'MSWord-Content');
63
63
  elm.innerHTML = tempHTMLContent;
64
+ this.addDoubleBr(elm);
64
65
  var patern = /class='?Mso|style='[^ ]*\bmso-/i;
65
66
  var patern2 = /class="?Mso|style="[^ ]*\bmso-/i;
66
67
  var patern3 = /(class="?Mso|class='?Mso|class="?Xl|class='?Xl|class=Xl|style="[^"]*\bmso-|style='[^']*\bmso-|w:WordDocument)/gi;
@@ -95,6 +96,26 @@ var MsWordPaste = /** @class */ (function () {
95
96
  e.callBack(elm.innerHTML);
96
97
  }
97
98
  };
99
+ MsWordPaste.prototype.addDoubleBr = function (elm) {
100
+ var newline = elm.querySelector('.Apple-interchange-newline');
101
+ if (!isNOU(newline) && Browser.userAgent.indexOf('Chrome') !== -1 && newline.parentElement.nodeName === 'P' && elm !== newline.parentElement) {
102
+ for (var i = 0; i < elm.childNodes.length; i++) {
103
+ // eslint-disable-next-line
104
+ var node = elm.childNodes[i];
105
+ if (node.nodeType === Node.COMMENT_NODE && node.nodeValue.includes('StartFragment')) {
106
+ var newElement = document.createElement('p');
107
+ newElement.innerHTML = '<br>';
108
+ var cssText = newline.parentElement.style.cssText;
109
+ var currentStyle = newElement.getAttribute('style') || '';
110
+ var newStyle = currentStyle + cssText;
111
+ newElement.setAttribute('style', newStyle);
112
+ elm.insertBefore(newElement, node.nextSibling);
113
+ detach(newline);
114
+ break;
115
+ }
116
+ }
117
+ }
118
+ };
98
119
  MsWordPaste.prototype.cleanList = function (elm, listTag) {
99
120
  var replacableElem = elm.querySelectorAll(listTag + ' div');
100
121
  for (var j = replacableElem.length - 1; j >= 0; j--) {
@@ -223,6 +223,9 @@ var BaseQuickToolbar = /** @class */ (function () {
223
223
  _this.parent.disableToolbarItem(_this.parent.toolbarSettings.items);
224
224
  _this.parent.enableToolbarItem(['Undo', 'Redo']);
225
225
  }
226
+ else {
227
+ _this.parent.enableToolbarItem(_this.parent.toolbarSettings.items);
228
+ }
226
229
  append([_this.element], document.body);
227
230
  if (_this.parent.showTooltip) {
228
231
  _this.tooltip = new Tooltip({
@@ -264,9 +267,9 @@ var BaseQuickToolbar = /** @class */ (function () {
264
267
  parentData: parent_1.getBoundingClientRect(),
265
268
  tBarElementHeight: tBarHeight
266
269
  };
267
- if (target.tagName === 'IMG' || target.tagName === 'AUDIO' || target.tagName === 'VIDEO' || target.tagName === 'IFRAME' || (target.classList &&
270
+ if ((target.tagName === 'IMG' || target.tagName === 'AUDIO' || target.tagName === 'VIDEO' || target.tagName === 'IFRAME' || (target.classList &&
268
271
  (target.classList.contains(classes.CLS_AUDIOWRAP) || target.classList.contains(classes.CLS_CLICKELEM) ||
269
- target.classList.contains(classes.CLS_VID_CLICK_ELEM)))) {
272
+ target.classList.contains(classes.CLS_VID_CLICK_ELEM)))) && (x == beforeQuickToolbarArgs.positionX || y == beforeQuickToolbarArgs.positionY)) {
270
273
  _this.setPosition(showPopupData);
271
274
  }
272
275
  if (!_this.parent.inlineMode.enable) {
@@ -39,6 +39,7 @@ export declare class ColorPickerInput {
39
39
  private setCssClass;
40
40
  private updateCss;
41
41
  protected addEventListener(): void;
42
+ private showColorPicker;
42
43
  private onPropertyChanged;
43
44
  protected removeEventListener(): void;
44
45
  }
@@ -170,6 +170,15 @@ var ColorPickerInput = /** @class */ (function () {
170
170
  this.parent.on(events.destroyColorPicker, this.destroyColorPicker, this);
171
171
  this.parent.on(events.modelChanged, this.onPropertyChanged, this);
172
172
  this.parent.on(events.bindCssClass, this.setCssClass, this);
173
+ this.parent.on(events.showColorPicker, this.showColorPicker, this);
174
+ };
175
+ ColorPickerInput.prototype.showColorPicker = function (e) {
176
+ if (!isNullOrUndefined(this.fontColorPicker) && (e.toolbarClick === "fontcolor")) {
177
+ this.fontColorDropDown.toggle();
178
+ }
179
+ else if (!isNullOrUndefined(this.backgroundColorPicker) && (e.toolbarClick === "backgroundcolor")) {
180
+ this.backgroundColorDropDown.toggle();
181
+ }
173
182
  };
174
183
  ColorPickerInput.prototype.onPropertyChanged = function (model) {
175
184
  var newProp = model.newProp;
@@ -243,6 +252,7 @@ var ColorPickerInput = /** @class */ (function () {
243
252
  this.parent.off(events.destroyColorPicker, this.destroyColorPicker);
244
253
  this.parent.off(events.modelChanged, this.onPropertyChanged);
245
254
  this.parent.off(events.bindCssClass, this.setCssClass);
255
+ this.parent.off(events.showColorPicker, this.showColorPicker);
246
256
  };
247
257
  return ColorPickerInput;
248
258
  }());
@@ -64,7 +64,7 @@ var EmojiPicker = /** @class */ (function () {
64
64
  this.parent.getToolbar().appendChild(this.popDiv);
65
65
  }
66
66
  else if (this.parent.inlineMode.enable) {
67
- this.parent.inputElement.appendChild(this.popDiv);
67
+ this.parent.element.appendChild(this.popDiv);
68
68
  }
69
69
  EventHandler.add(this.popDiv, 'keydown', this.onKeyDown, this);
70
70
  EventHandler.add(this.popDiv, 'keyup', this.searchFilter, this);
@@ -485,10 +485,10 @@ var EnterKeyAction = /** @class */ (function () {
485
485
  }
486
486
  var previousBlockNode = this.parent.formatter.editorManager.domNode.blockNodes()[0].previousSibling;
487
487
  var nextBlockNode = this.parent.formatter.editorManager.domNode.blockNodes()[0].nextSibling;
488
- if (!isNOU(previousBlockNode) && previousBlockNode.hasAttribute('style') && previousBlockNode.nodeName !== 'TABLE') {
488
+ if (!isNOU(previousBlockNode) && previousBlockNode.nodeName !== '#text' && previousBlockNode.hasAttribute('style') && previousBlockNode.nodeName !== 'TABLE') {
489
489
  insertElem.setAttribute('style', previousBlockNode.getAttribute('style'));
490
490
  }
491
- if (isNOU(previousBlockNode) && !isNOU(nextBlockNode) && nextBlockNode.hasAttribute('style') && nextBlockNode.nodeName !== 'TABLE') {
491
+ if (isNOU(previousBlockNode) && !isNOU(nextBlockNode) && nextBlockNode.nodeName !== '#text' && nextBlockNode.hasAttribute('style') && nextBlockNode.nodeName !== 'TABLE') {
492
492
  insertElem.setAttribute('style', nextBlockNode.getAttribute('style'));
493
493
  }
494
494
  return insertElem;
@@ -425,9 +425,9 @@ var HtmlEditor = /** @class */ (function () {
425
425
  var liElement = this.getRangeLiNode(currentRange.startContainer);
426
426
  if (liElement.previousElementSibling && liElement.previousElementSibling.childElementCount > 0) {
427
427
  this.oldRangeElement = liElement.previousElementSibling.lastElementChild.nodeName === 'BR' ?
428
- liElement.previousElementSibling : liElement.previousElementSibling.lastElementChild;
428
+ liElement.previousElementSibling : liElement.previousElementSibling.lastChild;
429
429
  if (!isNOU(liElement.lastElementChild) && liElement.lastElementChild.nodeName !== 'BR' &&
430
- isNOU(liElement.lastElementChild.previousSibling)) {
430
+ isNOU(liElement.lastElementChild.previousSibling) && liElement.lastChild.nodeName !== "#text") {
431
431
  this.rangeElement = liElement.lastElementChild;
432
432
  isLiElement = true;
433
433
  }
@@ -452,7 +452,7 @@ var HtmlEditor = /** @class */ (function () {
452
452
  ? this.oldRangeElement.lastElementChild.lastElementChild :
453
453
  this.oldRangeElement.lastElementChild;
454
454
  }
455
- var lastNode = this.oldRangeElement.lastChild;
455
+ var lastNode = this.oldRangeElement.lastChild ? this.oldRangeElement.lastChild : this.oldRangeElement;
456
456
  while (lastNode.nodeType !== 3 && lastNode.nodeName !== '#text' &&
457
457
  lastNode.nodeName !== 'BR') {
458
458
  lastNode = lastNode.lastChild;
@@ -460,12 +460,17 @@ var HtmlEditor = /** @class */ (function () {
460
460
  this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(),
461
461
  // eslint-disable-next-line
462
462
  lastNode, lastNode.textContent.length);
463
- if (this.oldRangeElement.querySelectorAll('BR').length === 1) {
463
+ if (this.oldRangeElement.nodeName !== '#text' && this.oldRangeElement.querySelectorAll('BR').length === 1) {
464
464
  detach(this.oldRangeElement.querySelector('BR'));
465
465
  }
466
466
  if (!isNOU(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {
467
467
  while (this.rangeElement.firstChild) {
468
- this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);
468
+ if (this.oldRangeElement.nodeName === '#text') {
469
+ this.oldRangeElement.parentElement.appendChild(this.rangeElement.childNodes[0]);
470
+ }
471
+ else {
472
+ this.oldRangeElement.appendChild(this.rangeElement.childNodes[0]);
473
+ }
469
474
  }
470
475
  // eslint-disable-next-line
471
476
  !isLiElement ? detach(this.rangeElement) : detach(this.rangeElement.parentElement);
@@ -149,7 +149,7 @@ var QuickToolbar = /** @class */ (function () {
149
149
 
150
150
  */
151
151
  QuickToolbar.prototype.showInlineQTBar = function (x, y, target) {
152
- if (isNOU(this.parent) || this.parent.readonly || target.tagName.toLowerCase() === 'img') {
152
+ if (isNOU(this.parent) || this.parent.readonly || target.tagName.toLowerCase() === 'img' || this.inlineQTBar.element.querySelector('.e-rte-color-content')) {
153
153
  return;
154
154
  }
155
155
  this.inlineQTBar.showPopup(x, y, target);
@@ -56,6 +56,9 @@ var Toolbar = /** @class */ (function () {
56
56
  if (e.target.classList.contains('e-hor-nav')) {
57
57
  this.adjustContentHeight(e.target, true);
58
58
  }
59
+ if (!isNullOrUndefined(e.target) && (e.target.classList.contains("e-rte-fontcolor-dropdown") || e.target.classList.contains("e-rte-backgroundcolor-dropdown"))) {
60
+ this.parent.notify(events.showColorPicker, { toolbarClick: e.target.classList.contains("e-rte-fontcolor-dropdown") ? "fontcolor" : "backgroundcolor" });
61
+ }
59
62
  }
60
63
  };
61
64
  Toolbar.prototype.createToolbarElement = function () {
@@ -759,6 +759,11 @@ export declare const documentClickClosedBy: string;
759
759
  /**
760
760
  * @hidden
761
761
 
762
+ */
763
+ export declare const showColorPicker: string;
764
+ /**
765
+ * @hidden
766
+
762
767
  */
763
768
  export declare const blockEmptyNodes: string;
764
769
  /**
@@ -759,6 +759,11 @@ export var documentClickClosedBy = 'documentClickClosedBy';
759
759
  /**
760
760
  * @hidden
761
761
 
762
+ */
763
+ export var showColorPicker = 'showColorPicker';
764
+ /**
765
+ * @hidden
766
+
762
767
  */
763
768
  export var blockEmptyNodes = "address:empty, article:empty, aside:empty, blockquote:empty,\n details:empty, dd:empty, div:empty, dl:empty, dt:empty, fieldset:empty, footer:empty,form:empty, h1:empty,\n h2:empty, h3:empty, h4:empty, h5:empty, h6:empty, header:empty, hgroup:empty, li:empty, main:empty, nav:empty,\n noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty";
764
769
  /**
@@ -911,11 +911,14 @@ var RichTextEditor = /** @class */ (function (_super) {
911
911
  clientX: touch.clientX, clientY: touch.clientY }
912
912
  });
913
913
  if (this.inputElement && ((this.editorMode === 'HTML' && this.inputElement.textContent.length !== 0) ||
914
- (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0)) || (e.target && (e.target.nodeName === 'VIDEO'
915
- || e.target.querySelectorAll('.' + classes.CLS_VIDEOWRAP).length > 0) || (e.target && e.target.nodeName !== 'BR' &&
916
- (e.target.classList.contains(classes.CLS_AUDIOWRAP) ||
917
- e.target.classList.contains(classes.CLS_CLICKELEM) ||
918
- e.target.classList.contains(classes.CLS_VID_CLICK_ELEM))))) {
914
+ (this.editorMode === 'Markdown' && this.inputElement.value.length !== 0)) ||
915
+ (e.target && !isNOU(closest(e.target, 'table'))) ||
916
+ (e.target && (e.target.nodeName === 'VIDEO' ||
917
+ e.target.querySelectorAll('.' + classes.CLS_VIDEOWRAP).length > 0) ||
918
+ (e.target && e.target.nodeName !== 'BR' &&
919
+ (e.target.classList.contains(classes.CLS_AUDIOWRAP) ||
920
+ e.target.classList.contains(classes.CLS_CLICKELEM) ||
921
+ e.target.classList.contains(classes.CLS_VID_CLICK_ELEM))))) {
919
922
  this.notify(events.toolbarRefresh, { args: e });
920
923
  }
921
924
  this.triggerEditArea(e);
@@ -1799,6 +1802,13 @@ var RichTextEditor = /** @class */ (function (_super) {
1799
1802
  var imgPadding = 12;
1800
1803
  var imgResizeBorder = 2;
1801
1804
  var editEle = this.contentModule.getEditPanel();
1805
+ if (this.editorMode === "HTML" && !isNOU(this.formatter.editorManager.nodeSelection) && !isNOU(this.formatter.editorManager.nodeSelection.range)) {
1806
+ var currentRange = this.formatter.editorManager.nodeSelection.range;
1807
+ if (currentRange.startContainer.nodeType !== 3 && currentRange.startContainer.closest &&
1808
+ !isNOU(currentRange.startContainer.closest('TD'))) {
1809
+ editEle = currentRange.startContainer;
1810
+ }
1811
+ }
1802
1812
  var eleStyle = window.getComputedStyle(editEle);
1803
1813
  var editEleMaxWidth = editEle.offsetWidth - (imgPadding + imgResizeBorder +
1804
1814
  parseFloat(eleStyle.paddingLeft.split('px')[0]) + parseFloat(eleStyle.paddingRight.split('px')[0]) +
@@ -2242,6 +2252,12 @@ var RichTextEditor = /** @class */ (function (_super) {
2242
2252
  var trg = e.relatedTarget;
2243
2253
  if (trg) {
2244
2254
  var rteElement = closest(trg, '.' + classes.CLS_RTE);
2255
+ if (!rteElement && this.iframeSettings.enable) {
2256
+ var iframeElement = this.element.querySelector('#' + this.getID() + '_rte-view');
2257
+ if (iframeElement && iframeElement.contentWindow.document.body.contains(trg)) {
2258
+ rteElement = closest(iframeElement, '.' + classes.CLS_RTE);
2259
+ }
2260
+ }
2245
2261
  if (rteElement && rteElement === this.element) {
2246
2262
  this.isBlur = false;
2247
2263
  if (trg === this.getToolbarElement()) {
@@ -94,7 +94,7 @@ export var defaultLocale = {
94
94
  'browse': 'Browse',
95
95
  'imageUrl': 'http://example.com/image.png',
96
96
  'audioUrl': 'http://example.com/audio.mp3',
97
- 'videoUrl': 'http://example.com/video.mp3',
97
+ 'videoUrl': 'http://example.com/video.mp4',
98
98
  'webUrl': 'Web URL',
99
99
  'embedUrl': 'Embed Code',
100
100
  'imageCaption': 'Caption',