@syncfusion/ej2-richtexteditor 28.1.36 → 28.1.38-680214

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 (183) hide show
  1. package/README.md +1 -1
  2. package/dist/ej2-richtexteditor.min.js +1 -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 +221 -167
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +221 -167
  8. package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
  9. package/dist/global/ej2-richtexteditor.min.js +1 -1
  10. package/dist/global/ej2-richtexteditor.min.js.map +1 -1
  11. package/package.json +59 -82
  12. package/src/common/interface.d.ts +8 -8
  13. package/src/common/util.d.ts +1 -2
  14. package/src/common/util.js +49 -95
  15. package/src/editor-manager/base/classes.d.ts +1 -1
  16. package/src/editor-manager/base/classes.js +1 -1
  17. package/src/editor-manager/base/editor-manager.d.ts +3 -3
  18. package/src/editor-manager/base/editor-manager.js +3 -3
  19. package/src/editor-manager/base/enum.d.ts +2 -2
  20. package/src/editor-manager/base/interface.d.ts +17 -9
  21. package/src/editor-manager/base/types.d.ts +1 -1
  22. package/src/editor-manager/plugin/alignments.d.ts +2 -2
  23. package/src/editor-manager/plugin/alignments.js +2 -2
  24. package/src/editor-manager/plugin/audio.d.ts +3 -3
  25. package/src/editor-manager/plugin/audio.js +3 -3
  26. package/src/editor-manager/plugin/clearformat-exec.d.ts +2 -2
  27. package/src/editor-manager/plugin/clearformat-exec.js +2 -2
  28. package/src/editor-manager/plugin/clearformat.d.ts +1 -1
  29. package/src/editor-manager/plugin/clearformat.js +1 -1
  30. package/src/editor-manager/plugin/dom-node.d.ts +36 -36
  31. package/src/editor-manager/plugin/dom-node.js +36 -36
  32. package/src/editor-manager/plugin/format-painter-actions.d.ts +1 -1
  33. package/src/editor-manager/plugin/format-painter-actions.js +1 -1
  34. package/src/editor-manager/plugin/formats.d.ts +2 -2
  35. package/src/editor-manager/plugin/formats.js +2 -2
  36. package/src/editor-manager/plugin/image.d.ts +3 -3
  37. package/src/editor-manager/plugin/image.js +3 -3
  38. package/src/editor-manager/plugin/indents.d.ts +2 -2
  39. package/src/editor-manager/plugin/indents.js +2 -2
  40. package/src/editor-manager/plugin/insert-methods.d.ts +4 -4
  41. package/src/editor-manager/plugin/insert-methods.js +4 -4
  42. package/src/editor-manager/plugin/insert-text.d.ts +2 -2
  43. package/src/editor-manager/plugin/insert-text.js +2 -2
  44. package/src/editor-manager/plugin/inserthtml-exec.d.ts +2 -2
  45. package/src/editor-manager/plugin/inserthtml-exec.js +2 -2
  46. package/src/editor-manager/plugin/inserthtml.d.ts +2 -2
  47. package/src/editor-manager/plugin/inserthtml.js +5 -5
  48. package/src/editor-manager/plugin/isformatted.d.ts +9 -9
  49. package/src/editor-manager/plugin/isformatted.js +9 -9
  50. package/src/editor-manager/plugin/link.d.ts +2 -2
  51. package/src/editor-manager/plugin/link.js +2 -2
  52. package/src/editor-manager/plugin/lists.d.ts +3 -2
  53. package/src/editor-manager/plugin/lists.js +15 -3
  54. package/src/editor-manager/plugin/ms-word-clean-up.d.ts +1 -1
  55. package/src/editor-manager/plugin/ms-word-clean-up.js +1 -1
  56. package/src/editor-manager/plugin/nodecutter.d.ts +6 -6
  57. package/src/editor-manager/plugin/nodecutter.js +6 -6
  58. package/src/editor-manager/plugin/selection-commands.d.ts +1 -1
  59. package/src/editor-manager/plugin/selection-commands.js +2 -1
  60. package/src/editor-manager/plugin/selection-exec.d.ts +2 -2
  61. package/src/editor-manager/plugin/selection-exec.js +2 -2
  62. package/src/editor-manager/plugin/table.d.ts +2 -2
  63. package/src/editor-manager/plugin/table.js +2 -2
  64. package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
  65. package/src/editor-manager/plugin/toolbar-status.js +2 -2
  66. package/src/editor-manager/plugin/undo.d.ts +6 -6
  67. package/src/editor-manager/plugin/undo.js +6 -6
  68. package/src/editor-manager/plugin/video.d.ts +3 -3
  69. package/src/editor-manager/plugin/video.js +3 -3
  70. package/src/markdown-parser/base/interface.d.ts +10 -10
  71. package/src/markdown-parser/base/markdown-parser.d.ts +3 -3
  72. package/src/markdown-parser/base/markdown-parser.js +3 -3
  73. package/src/markdown-parser/base/types.d.ts +1 -1
  74. package/src/markdown-parser/plugin/clearformat.d.ts +2 -2
  75. package/src/markdown-parser/plugin/clearformat.js +2 -2
  76. package/src/markdown-parser/plugin/formats.d.ts +2 -2
  77. package/src/markdown-parser/plugin/formats.js +2 -2
  78. package/src/markdown-parser/plugin/insert-text.d.ts +2 -2
  79. package/src/markdown-parser/plugin/insert-text.js +2 -2
  80. package/src/markdown-parser/plugin/link.d.ts +2 -2
  81. package/src/markdown-parser/plugin/link.js +2 -2
  82. package/src/markdown-parser/plugin/markdown-selection.d.ts +14 -14
  83. package/src/markdown-parser/plugin/markdown-selection.js +14 -14
  84. package/src/markdown-parser/plugin/md-selection-formats.d.ts +1 -1
  85. package/src/markdown-parser/plugin/md-selection-formats.js +1 -1
  86. package/src/markdown-parser/plugin/table.d.ts +3 -3
  87. package/src/markdown-parser/plugin/table.js +3 -3
  88. package/src/markdown-parser/plugin/undo.d.ts +6 -6
  89. package/src/markdown-parser/plugin/undo.js +6 -6
  90. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +9 -9
  91. package/src/rich-text-editor/actions/base-quick-toolbar.js +9 -9
  92. package/src/rich-text-editor/actions/base-toolbar.d.ts +3 -3
  93. package/src/rich-text-editor/actions/base-toolbar.js +3 -3
  94. package/src/rich-text-editor/actions/color-picker.d.ts +2 -2
  95. package/src/rich-text-editor/actions/color-picker.js +2 -2
  96. package/src/rich-text-editor/actions/count.d.ts +3 -3
  97. package/src/rich-text-editor/actions/count.js +3 -3
  98. package/src/rich-text-editor/actions/dropdown-buttons.d.ts +2 -2
  99. package/src/rich-text-editor/actions/dropdown-buttons.js +2 -2
  100. package/src/rich-text-editor/actions/emoji-picker.d.ts +1 -1
  101. package/src/rich-text-editor/actions/emoji-picker.js +1 -1
  102. package/src/rich-text-editor/actions/enter-key.js +37 -5
  103. package/src/rich-text-editor/actions/full-screen.d.ts +3 -3
  104. package/src/rich-text-editor/actions/full-screen.js +3 -3
  105. package/src/rich-text-editor/actions/html-editor.d.ts +3 -3
  106. package/src/rich-text-editor/actions/html-editor.js +28 -6
  107. package/src/rich-text-editor/actions/keyboard.d.ts +1 -1
  108. package/src/rich-text-editor/actions/keyboard.js +1 -1
  109. package/src/rich-text-editor/actions/markdown-editor.d.ts +2 -2
  110. package/src/rich-text-editor/actions/markdown-editor.js +2 -2
  111. package/src/rich-text-editor/actions/paste-clean-up.d.ts +1 -1
  112. package/src/rich-text-editor/actions/paste-clean-up.js +27 -11
  113. package/src/rich-text-editor/actions/quick-toolbar.d.ts +9 -9
  114. package/src/rich-text-editor/actions/quick-toolbar.js +9 -9
  115. package/src/rich-text-editor/actions/resize.d.ts +2 -0
  116. package/src/rich-text-editor/actions/resize.js +14 -2
  117. package/src/rich-text-editor/actions/toolbar.d.ts +13 -13
  118. package/src/rich-text-editor/actions/toolbar.js +13 -13
  119. package/src/rich-text-editor/actions/xhtml-validation.d.ts +1 -1
  120. package/src/rich-text-editor/actions/xhtml-validation.js +1 -1
  121. package/src/rich-text-editor/base/classes.d.ts +125 -125
  122. package/src/rich-text-editor/base/classes.js +125 -125
  123. package/src/rich-text-editor/base/constant.d.ts +158 -158
  124. package/src/rich-text-editor/base/constant.js +158 -158
  125. package/src/rich-text-editor/base/enum.d.ts +1 -1
  126. package/src/rich-text-editor/base/enum.js +1 -1
  127. package/src/rich-text-editor/base/interface.d.ts +51 -51
  128. package/src/rich-text-editor/base/interface.js +1 -1
  129. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +1 -1
  130. package/src/rich-text-editor/base/rich-text-editor.d.ts +62 -62
  131. package/src/rich-text-editor/base/rich-text-editor.js +34 -35
  132. package/src/rich-text-editor/base/util.d.ts +1 -1
  133. package/src/rich-text-editor/base/util.js +1 -1
  134. package/src/rich-text-editor/formatter/formatter.d.ts +8 -8
  135. package/src/rich-text-editor/formatter/formatter.js +9 -9
  136. package/src/rich-text-editor/formatter/html-formatter.d.ts +2 -2
  137. package/src/rich-text-editor/formatter/html-formatter.js +2 -2
  138. package/src/rich-text-editor/formatter/markdown-formatter.d.ts +2 -2
  139. package/src/rich-text-editor/formatter/markdown-formatter.js +2 -2
  140. package/src/rich-text-editor/renderer/audio-module.d.ts +1 -1
  141. package/src/rich-text-editor/renderer/audio-module.js +1 -1
  142. package/src/rich-text-editor/renderer/content-renderer.d.ts +6 -6
  143. package/src/rich-text-editor/renderer/content-renderer.js +6 -6
  144. package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -2
  145. package/src/rich-text-editor/renderer/dialog-renderer.js +2 -2
  146. package/src/rich-text-editor/renderer/iframe-content-renderer.d.ts +4 -4
  147. package/src/rich-text-editor/renderer/iframe-content-renderer.js +4 -4
  148. package/src/rich-text-editor/renderer/image-module.d.ts +1 -1
  149. package/src/rich-text-editor/renderer/image-module.js +1 -1
  150. package/src/rich-text-editor/renderer/link-module.d.ts +1 -1
  151. package/src/rich-text-editor/renderer/link-module.js +3 -3
  152. package/src/rich-text-editor/renderer/markdown-renderer.d.ts +6 -6
  153. package/src/rich-text-editor/renderer/markdown-renderer.js +6 -6
  154. package/src/rich-text-editor/renderer/popup-renderer.d.ts +5 -5
  155. package/src/rich-text-editor/renderer/popup-renderer.js +5 -5
  156. package/src/rich-text-editor/renderer/render.d.ts +2 -2
  157. package/src/rich-text-editor/renderer/render.js +2 -2
  158. package/src/rich-text-editor/renderer/table-module.d.ts +3 -2
  159. package/src/rich-text-editor/renderer/table-module.js +44 -41
  160. package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +9 -9
  161. package/src/rich-text-editor/renderer/toolbar-renderer.js +16 -13
  162. package/src/rich-text-editor/renderer/video-module.d.ts +1 -1
  163. package/src/rich-text-editor/renderer/video-module.js +1 -1
  164. package/src/rich-text-editor/renderer/view-source.d.ts +5 -5
  165. package/src/rich-text-editor/renderer/view-source.js +5 -5
  166. package/src/rich-text-editor/services/renderer-factory.d.ts +3 -3
  167. package/src/rich-text-editor/services/renderer-factory.js +3 -3
  168. package/src/rich-text-editor/services/service-locator.d.ts +3 -3
  169. package/src/rich-text-editor/services/service-locator.js +3 -3
  170. package/src/selection/selection.d.ts +22 -22
  171. package/src/selection/selection.js +22 -22
  172. package/styles/bootstrap5.3-lite.css +5 -0
  173. package/styles/bootstrap5.3.css +5 -0
  174. package/styles/material3-dark.scss +1 -1
  175. package/styles/material3.scss +1 -1
  176. package/styles/rich-text-editor/_layout.scss +1 -1
  177. package/styles/rich-text-editor/_theme.scss +1 -1
  178. package/styles/rich-text-editor/bootstrap5.3.css +5 -0
  179. package/styles/rich-text-editor/material3-dark.scss +1 -1
  180. package/styles/rich-text-editor/material3.scss +1 -1
  181. package/styles/rich-text-editor/tailwind3.css +5 -0
  182. package/styles/tailwind3-lite.css +5 -0
  183. package/styles/tailwind3.css +5 -0
@@ -1,4 +1,4 @@
1
- import { isNullOrUndefined, Browser, addClass, removeClass, selectAll as selectAll$1, createElement, detach, SanitizeHtmlHelper, extend, EventHandler, closest, getInstance, formatUnit, select, Ajax, Base, Property, Event as Event$1, NotifyPropertyChanges, ChildProperty, KeyboardEvents as KeyboardEvents$1, setStyleAttribute, getUniqueID, append, debounce, Observer, prepend, attributes, getComponent, getEnumValue, Complex, Component, print, L10n, compile, Touch } from '@syncfusion/ej2-base';
1
+ import { isNullOrUndefined, Browser, addClass, removeClass, selectAll as selectAll$1, createElement, detach, SanitizeHtmlHelper, extend, EventHandler, closest, getInstance, formatUnit, select, Ajax, Base, Property, Event as Event$1, NotifyPropertyChanges, getComponent, ChildProperty, KeyboardEvents as KeyboardEvents$1, setStyleAttribute, getUniqueID, append, debounce, Observer, prepend, attributes, getEnumValue, Complex, Component, print, L10n, compile, Touch } from '@syncfusion/ej2-base';
2
2
  import { Toolbar as Toolbar$1 } from '@syncfusion/ej2-navigations';
3
3
  import { DropDownButton } from '@syncfusion/ej2-splitbuttons';
4
4
  import { Tooltip, Popup, Dialog, isCollide, getScrollableParent } from '@syncfusion/ej2-popups';
@@ -4793,11 +4793,6 @@ class NodeSelection {
4793
4793
  /**
4794
4794
  * Defines common util methods used by Rich Text Editor.
4795
4795
  */
4796
- const inlineNode$1 = ['a', 'abbr', 'acronym', 'audio', 'b', 'bdi', 'bdo', 'big', 'br', 'button',
4797
- 'canvas', 'cite', 'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'font', 'i', 'iframe', 'img', 'input',
4798
- 'ins', 'kbd', 'label', 'map', 'mark', 'meter', 'noscript', 'object', 'output', 'picture', 'progress',
4799
- 'q', 'ruby', 's', 'samp', 'script', 'select', 'slot', 'small', 'span', 'strong', 'strike', 'sub', 'sup', 'svg',
4800
- 'template', 'textarea', 'time', 'u', 'tt', 'var', 'video', 'wbr'];
4801
4796
  /**
4802
4797
  * @returns {void}
4803
4798
  * @hidden
@@ -4825,109 +4820,68 @@ function setEditFrameFocus(editableElement, selector) {
4825
4820
  }
4826
4821
  /**
4827
4822
  * @param {string} value - specifies the string value
4828
- * @param {string} enterAction - specifies the enter key action API
4829
4823
  * @returns {void}
4830
4824
  * @hidden
4831
4825
  */
4832
- function updateTextNode$1(value, enterAction) {
4833
- const tempNode = document.createElement('div');
4834
- tempNode.innerHTML = value;
4835
- tempNode.setAttribute('class', 'tempDiv');
4826
+ function updateTextNode$1(value) {
4836
4827
  const resultElm = document.createElement('div');
4837
- const childNodes = tempNode.childNodes;
4838
- if (childNodes.length > 0) {
4839
- let isPreviousInlineElem;
4840
- let previousParent;
4841
- let paraElm;
4842
- while (tempNode.firstChild) {
4843
- if ((tempNode.firstChild.nodeName === '#text' &&
4844
- (tempNode.firstChild.textContent.indexOf('\n') < 0 || tempNode.firstChild.textContent.trim() !== '')) ||
4845
- inlineNode$1.indexOf(tempNode.firstChild.nodeName.toLocaleLowerCase()) >= 0) {
4846
- if (!isPreviousInlineElem) {
4847
- if (enterAction === 'BR') {
4848
- resultElm.appendChild(tempNode.firstChild);
4849
- previousParent = resultElm;
4850
- }
4851
- else {
4852
- paraElm = createElement('p');
4853
- resultElm.appendChild(paraElm);
4854
- paraElm.appendChild(tempNode.firstChild);
4855
- previousParent = paraElm;
4856
- isPreviousInlineElem = true;
4857
- }
4858
- }
4859
- else {
4860
- previousParent.appendChild(tempNode.firstChild);
4861
- previousParent = paraElm;
4862
- isPreviousInlineElem = true;
4863
- }
4828
+ resultElm.innerHTML = value;
4829
+ const tableElm = resultElm.querySelectorAll('table');
4830
+ for (let i = 0; i < tableElm.length; i++) {
4831
+ if (tableElm[i].classList.length > 0 &&
4832
+ !tableElm[i].classList.contains('e-rte-table') && !tableElm[i].classList.contains('e-rte-custom-table')) {
4833
+ tableElm[i].classList.add('e-rte-paste-table');
4834
+ if (tableElm[i].classList.contains('e-rte-paste-word-table')) {
4835
+ tableElm[i].classList.remove('e-rte-paste-word-table');
4836
+ continue; // Skiping the removal of the border if the source is from word.
4864
4837
  }
4865
- else if (tempNode.firstChild.nodeName === '#text' && (tempNode.firstChild.textContent === '\n' ||
4866
- (tempNode.firstChild.textContent.indexOf('\n') >= 0 && tempNode.firstChild.textContent.trim() === ''))) {
4867
- detach(tempNode.firstChild);
4868
- }
4869
- else {
4870
- resultElm.appendChild(tempNode.firstChild);
4871
- isPreviousInlineElem = false;
4872
- }
4873
- }
4874
- const tableElm = resultElm.querySelectorAll('table');
4875
- for (let i = 0; i < tableElm.length; i++) {
4876
- if (tableElm[i].classList.length > 0 &&
4877
- !tableElm[i].classList.contains('e-rte-table') && !tableElm[i].classList.contains('e-rte-custom-table')) {
4878
- tableElm[i].classList.add('e-rte-paste-table');
4879
- if (tableElm[i].classList.contains('e-rte-paste-word-table')) {
4880
- tableElm[i].classList.remove('e-rte-paste-word-table');
4881
- continue; // Skiping the removal of the border if the source is from word.
4838
+ else if (tableElm[i].classList.contains('e-rte-paste-excel-table')) {
4839
+ tableElm[i].classList.remove('e-rte-paste-excel-table');
4840
+ if (tableElm[i].getAttribute('border') === '0') {
4841
+ tableElm[i].removeAttribute('border');
4882
4842
  }
4883
- else if (tableElm[i].classList.contains('e-rte-paste-excel-table')) {
4884
- tableElm[i].classList.remove('e-rte-paste-excel-table');
4885
- if (tableElm[i].getAttribute('border') === '0') {
4886
- tableElm[i].removeAttribute('border');
4843
+ const tdElm = tableElm[i].querySelectorAll('td');
4844
+ for (let j = 0; j < tdElm.length; j++) {
4845
+ if (tdElm[j].style.borderLeft === 'none') {
4846
+ tdElm[j].style.removeProperty('border-left');
4887
4847
  }
4888
- const tdElm = tableElm[i].querySelectorAll('td');
4889
- for (let j = 0; j < tdElm.length; j++) {
4890
- if (tdElm[j].style.borderLeft === 'none') {
4891
- tdElm[j].style.removeProperty('border-left');
4892
- }
4893
- if (tdElm[j].style.borderRight === 'none') {
4894
- tdElm[j].style.removeProperty('border-right');
4895
- }
4896
- if (tdElm[j].style.borderBottom === 'none') {
4897
- tdElm[j].style.removeProperty('border-bottom');
4898
- }
4899
- if (tdElm[j].style.borderTop === 'none') {
4900
- tdElm[j].style.removeProperty('border-top');
4901
- }
4902
- if (tdElm[j].style.border === 'none') {
4903
- tdElm[j].style.removeProperty('border');
4904
- }
4848
+ if (tdElm[j].style.borderRight === 'none') {
4849
+ tdElm[j].style.removeProperty('border-right');
4850
+ }
4851
+ if (tdElm[j].style.borderBottom === 'none') {
4852
+ tdElm[j].style.removeProperty('border-bottom');
4853
+ }
4854
+ if (tdElm[j].style.borderTop === 'none') {
4855
+ tdElm[j].style.removeProperty('border-top');
4856
+ }
4857
+ if (tdElm[j].style.border === 'none') {
4858
+ tdElm[j].style.removeProperty('border');
4905
4859
  }
4906
- }
4907
- else if (tableElm[i].classList.contains('e-rte-paste-onenote-table')) {
4908
- tableElm[i].classList.remove('e-rte-paste-onenote-table');
4909
- continue;
4910
- }
4911
- else if (tableElm[i].classList.contains('e-rte-paste-html-table')) {
4912
- tableElm[i].classList.remove('e-rte-paste-html-table');
4913
- continue;
4914
4860
  }
4915
4861
  }
4916
- }
4917
- const imageElm = resultElm.querySelectorAll('img');
4918
- for (let i = 0; i < imageElm.length; i++) {
4919
- if (imageElm[i].classList.contains('e-rte-image-unsupported')) {
4920
- continue; // Should not add the class if the image is Broken.
4921
- }
4922
- if (!imageElm[i].classList.contains('e-rte-image')) {
4923
- imageElm[i].classList.add('e-rte-image');
4862
+ else if (tableElm[i].classList.contains('e-rte-paste-onenote-table')) {
4863
+ tableElm[i].classList.remove('e-rte-paste-onenote-table');
4864
+ continue;
4924
4865
  }
4925
- if (!(imageElm[i].classList.contains('e-imginline') ||
4926
- imageElm[i].classList.contains('e-imgbreak'))) {
4927
- imageElm[i].classList.add('e-imginline');
4866
+ else if (tableElm[i].classList.contains('e-rte-paste-html-table')) {
4867
+ tableElm[i].classList.remove('e-rte-paste-html-table');
4868
+ continue;
4928
4869
  }
4929
4870
  }
4930
4871
  }
4872
+ const imageElm = resultElm.querySelectorAll('img');
4873
+ for (let i = 0; i < imageElm.length; i++) {
4874
+ if (imageElm[i].classList.contains('e-rte-image-unsupported')) {
4875
+ continue; // Should not add the class if the image is Broken.
4876
+ }
4877
+ if (!imageElm[i].classList.contains('e-rte-image')) {
4878
+ imageElm[i].classList.add('e-rte-image');
4879
+ }
4880
+ if (!(imageElm[i].classList.contains('e-imginline') ||
4881
+ imageElm[i].classList.contains('e-imgbreak'))) {
4882
+ imageElm[i].classList.add('e-imginline');
4883
+ }
4884
+ }
4931
4885
  return resultElm.innerHTML;
4932
4886
  }
4933
4887
  /**
@@ -6143,7 +6097,6 @@ class ToolbarRenderer {
6143
6097
  let proxy = this;
6144
6098
  let value;
6145
6099
  const colorPicker = new ColorPicker({
6146
- enablePersistence: this.parent.enablePersistence,
6147
6100
  enableRtl: this.parent.enableRtl,
6148
6101
  inline: true,
6149
6102
  value: null,
@@ -6179,17 +6132,21 @@ class ToolbarRenderer {
6179
6132
  value: colorpickerValue
6180
6133
  };
6181
6134
  proxy.parent.notify(selectionRestore, {});
6182
- proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;
6135
+ if (proxy.currentElement) {
6136
+ proxy.currentElement.querySelector('.' + CLS_RTE_ELEMENTS).style.borderBottomColor = colorpickerValue;
6137
+ }
6183
6138
  const range = proxy.parent.formatter.editorManager.nodeSelection.getRange(proxy.parent.contentModule.getDocument());
6184
6139
  const closestElement = closest(range.startContainer.parentNode, 'table');
6185
6140
  if ((range.startContainer.nodeName === 'TD' || range.startContainer.nodeName === 'TH' || range.startContainer.nodeName === 'BODY' ||
6186
- closest(range.startContainer.parentNode, 'td,th')) && range.collapsed && args.subCommand === 'BackgroundColor' && (closest(closestElement, '.' + CLS_RTE) || proxy.parent.iframeSettings.enable)) {
6141
+ (range.startContainer.parentNode && closest(range.startContainer.parentNode, 'td,th'))) && range.collapsed && args.subCommand === 'BackgroundColor' && (closestElement && closest(closestElement, '.' + CLS_RTE) || proxy.parent.iframeSettings.enable)) {
6187
6142
  proxy.parent.notify(tableColorPickerChanged, colorPickerArgs);
6188
6143
  }
6189
6144
  else {
6190
6145
  proxy.parent.notify(colorPickerChanged, colorPickerArgs);
6191
6146
  }
6192
- proxy.currentDropdown.toggle();
6147
+ if (proxy.currentDropdown) {
6148
+ proxy.currentDropdown.toggle();
6149
+ }
6193
6150
  },
6194
6151
  beforeModeSwitch: (args) => {
6195
6152
  value = colorPicker.value;
@@ -6650,10 +6607,10 @@ class Link {
6650
6607
  }
6651
6608
  if (!this.selfLink.isUrl(linkUrl)) {
6652
6609
  if (this.selfLink.parent.editorMode === 'Markdown') {
6653
- linkText = (linkText !== '') ? linkText : '';
6610
+ linkText = (linkText.trim() !== '') ? linkText : '';
6654
6611
  }
6655
6612
  else {
6656
- linkText = (linkText === '') ? linkUrl : linkText;
6613
+ linkText = (linkText.trim() === '') ? linkUrl : linkText;
6657
6614
  }
6658
6615
  if (!this.selfLink.parent.enableAutoUrl) {
6659
6616
  linkUrl = linkUrl.indexOf('http') > -1 ? linkUrl : 'http://' + linkUrl;
@@ -12484,7 +12441,6 @@ class Table {
12484
12441
  this.parent.on(tableToolbarAction, this.onToolbarAction, this);
12485
12442
  this.parent.on(dropDownSelect, this.dropdownSelect, this);
12486
12443
  this.parent.on(keyDown, this.keyDown, this);
12487
- this.parent.on(keyUp, this.keyUp, this);
12488
12444
  this.parent.on(tableModulekeyUp, this.tableModulekeyUp, this);
12489
12445
  this.parent.on(bindCssClass, this.setCssClass, this);
12490
12446
  this.parent.on(destroy, this.destroy, this);
@@ -12505,7 +12461,6 @@ class Table {
12505
12461
  this.parent.off(mouseDown, this.cellSelect);
12506
12462
  this.parent.off(tableColorPickerChanged, this.setBGColor);
12507
12463
  this.parent.off(keyDown, this.keyDown);
12508
- this.parent.off(keyUp, this.keyUp);
12509
12464
  this.parent.off(tableModulekeyUp, this.tableModulekeyUp);
12510
12465
  this.parent.off(bindCssClass, this.setCssClass);
12511
12466
  this.parent.off(destroy, this.destroy);
@@ -12602,20 +12557,6 @@ class Table {
12602
12557
  this.parent.formatter.process(this.parent, e, e, { selection: selectCell, subCommand: e.item.subCommand });
12603
12558
  this.hideTableQuickToolbar();
12604
12559
  }
12605
- keyUp(e) {
12606
- const target = e.args.target;
12607
- if (e.args.key.toLocaleLowerCase() === 'escape' && target && target.classList && (this.popupObj && !closest(target, '[id=' + '\'' + this.popupObj.element.id + '\'' + ']')) && this.popupObj) {
12608
- let createTableToolbarBtn = this.popupObj.relateTo;
12609
- if (createTableToolbarBtn.nodeName !== 'BUTTON') {
12610
- createTableToolbarBtn = createTableToolbarBtn.querySelector('span.e-create-table');
12611
- createTableToolbarBtn = createTableToolbarBtn.parentElement;
12612
- }
12613
- this.popupObj.hide();
12614
- if (createTableToolbarBtn) {
12615
- createTableToolbarBtn.focus();
12616
- }
12617
- }
12618
- }
12619
12560
  keyDown(e) {
12620
12561
  const event = e.args;
12621
12562
  // eslint-disable-next-line
@@ -14187,6 +14128,8 @@ class Table {
14187
14128
  const header = '1X1';
14188
14129
  const insertbtn = this.l10n.getConstant('inserttablebtn');
14189
14130
  this.dlgDiv = this.parent.createElement('div', { className: 'e-rte-table-popup' + this.parent.getCssClass(true), id: this.rteID + '_table' });
14131
+ this.createTablePopupBoundFn = this.createTablePopupKeyDown.bind(this);
14132
+ this.dlgDiv.addEventListener('keydown', this.createTablePopupBoundFn);
14190
14133
  this.tblHeader = this.parent.createElement('div', { className: 'e-rte-popup-header' + this.parent.getCssClass(true) });
14191
14134
  this.tblHeader.innerHTML = header;
14192
14135
  this.dlgDiv.appendChild(this.tblHeader);
@@ -14224,6 +14167,7 @@ class Table {
14224
14167
  // eslint-disable-next-line
14225
14168
  close: (event) => {
14226
14169
  EventHandler.remove(btnEle, 'click', this.insertTableDialog);
14170
+ this.dlgDiv.removeEventListener('keydown', this.createTablePopupBoundFn);
14227
14171
  detach(btnEle);
14228
14172
  if (this.createTableButton && !this.createTableButton.isDestroyed) {
14229
14173
  this.createTableButton.destroy();
@@ -14477,34 +14421,40 @@ class Table {
14477
14421
  // eslint-disable-next-line
14478
14422
  applyProperties(args, e) {
14479
14423
  const dialogEle = this.editdlgObj.element;
14480
- const table = closest(args.selectNode[0], 'table');
14481
- table.style.width = dialogEle.querySelector('.e-table-width') ? dialogEle.querySelector('.e-table-width').value + 'px'
14482
- : table.style.width;
14483
- if (dialogEle.querySelector('.e-cell-padding') && dialogEle.querySelector('.e-cell-padding').value !== '') {
14484
- const tdElm = table.querySelectorAll('td');
14485
- for (let i = 0; i < tdElm.length; i++) {
14486
- let padVal = '';
14487
- if (tdElm[i].style.padding === '') {
14488
- padVal = tdElm[i].getAttribute('style') + ' padding:' +
14489
- dialogEle.querySelector('.e-cell-padding').value + 'px;';
14424
+ if (dialogEle && args && args.selectNode.length > 0 && args.selectNode[0]) {
14425
+ const selectedElement = (args.selectNode[0] && args.selectNode[0].nodeType === 3 ?
14426
+ args.selectNode[0].parentNode : args.selectNode[0]);
14427
+ const table = selectedElement ? closest(selectedElement, 'table') : null;
14428
+ if (table) {
14429
+ table.style.width = dialogEle.querySelector('.e-table-width') ? dialogEle.querySelector('.e-table-width').value + 'px'
14430
+ : table.style.width;
14431
+ if (dialogEle.querySelector('.e-cell-padding') && dialogEle.querySelector('.e-cell-padding').value !== '') {
14432
+ const tdElm = table.querySelectorAll('td');
14433
+ for (let i = 0; i < tdElm.length; i++) {
14434
+ let padVal = '';
14435
+ if (tdElm[i].style.padding === '') {
14436
+ padVal = tdElm[i].getAttribute('style') + ' padding:' +
14437
+ dialogEle.querySelector('.e-cell-padding').value + 'px;';
14438
+ }
14439
+ else {
14440
+ tdElm[i].style.padding = dialogEle.querySelector('.e-cell-padding').value + 'px';
14441
+ padVal = tdElm[i].getAttribute('style');
14442
+ }
14443
+ tdElm[i].setAttribute('style', padVal);
14444
+ }
14445
+ }
14446
+ table.cellSpacing = dialogEle.querySelector('.e-cell-spacing') ? dialogEle.querySelector('.e-cell-spacing').value
14447
+ : table.cellSpacing;
14448
+ if (!isNullOrUndefined(table.cellSpacing) && table.cellSpacing !== '0') {
14449
+ addClass([table], CLS_TABLE_BORDER);
14490
14450
  }
14491
14451
  else {
14492
- tdElm[i].style.padding = dialogEle.querySelector('.e-cell-padding').value + 'px';
14493
- padVal = tdElm[i].getAttribute('style');
14452
+ removeClassWithAttr([table], CLS_TABLE_BORDER);
14494
14453
  }
14495
- tdElm[i].setAttribute('style', padVal);
14454
+ this.parent.formatter.saveData();
14455
+ this.editdlgObj.hide({ returnValue: true });
14496
14456
  }
14497
14457
  }
14498
- table.cellSpacing = dialogEle.querySelector('.e-cell-spacing') ? dialogEle.querySelector('.e-cell-spacing').value
14499
- : table.cellSpacing;
14500
- if (!isNullOrUndefined(table.cellSpacing) && table.cellSpacing !== '0') {
14501
- addClass([table], CLS_TABLE_BORDER);
14502
- }
14503
- else {
14504
- removeClassWithAttr([table], CLS_TABLE_BORDER);
14505
- }
14506
- this.parent.formatter.saveData();
14507
- this.editdlgObj.hide({ returnValue: true });
14508
14458
  }
14509
14459
  tableDlgContent(e) {
14510
14460
  const selectNode = e.selectParent[0];
@@ -14599,6 +14549,7 @@ class Table {
14599
14549
  this.createTableButton.destroy();
14600
14550
  this.createTableButton = null;
14601
14551
  }
14552
+ this.createTablePopupBoundFn = null;
14602
14553
  this.isDestroyed = true;
14603
14554
  }
14604
14555
  /**
@@ -14624,6 +14575,15 @@ class Table {
14624
14575
  'px; left:' + (tablePosition.left + parseInt(getComputedStyle(this.curTable).width, 10) - 4) + 'px;';
14625
14576
  }
14626
14577
  }
14578
+ createTablePopupKeyDown(e) {
14579
+ if (e.key === 'Escape') {
14580
+ const popupRootElem = e.target.closest('.e-rte-table-popup');
14581
+ const popup = getComponent(popupRootElem, 'popup');
14582
+ const tableToolbarButton = popup.relateTo;
14583
+ popup.hide();
14584
+ tableToolbarButton.focus({ preventScroll: true });
14585
+ }
14586
+ }
14627
14587
  }
14628
14588
 
14629
14589
  /**
@@ -19400,7 +19360,7 @@ class Formatter {
19400
19360
  }
19401
19361
  }
19402
19362
  const command = actionBeginArgs.item.subCommand.toLocaleLowerCase();
19403
- if (command === 'image') {
19363
+ if (command === 'image' || command === 'file' || command === 'replace') {
19404
19364
  value = actionBeginArgs.itemCollection;
19405
19365
  }
19406
19366
  if (command === 'paste' || command === 'cut' || command === 'copy') {
@@ -22293,7 +22253,7 @@ class InsertHtml {
22293
22253
  nodeSelection.setSelectionText(docElement, lastSelectionNode, lastSelectionNode, 0, 0);
22294
22254
  }
22295
22255
  else {
22296
- this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction);
22256
+ this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode);
22297
22257
  }
22298
22258
  this.alignCheck(editNode);
22299
22259
  this.listCleanUp(nodeSelection, docElement);
@@ -22553,9 +22513,9 @@ class InsertHtml {
22553
22513
  }
22554
22514
  }
22555
22515
  }
22556
- static cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction) {
22516
+ static cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode) {
22557
22517
  lastSelectionNode.classList.add('lastNode');
22558
- editNode.innerHTML = updateTextNode$1(editNode.innerHTML, enterAction);
22518
+ editNode.innerHTML = updateTextNode$1(editNode.innerHTML);
22559
22519
  lastSelectionNode = editNode.querySelector('.lastNode');
22560
22520
  if (!isNullOrUndefined(lastSelectionNode)) {
22561
22521
  this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);
@@ -24034,6 +23994,17 @@ class Lists {
24034
23994
  }
24035
23995
  return false;
24036
23996
  }
23997
+ createAutoList(enterKey, shiftEnterKey) {
23998
+ const autoListRules = {
23999
+ BR: { BR: true, P: true, DIV: true },
24000
+ P: { BR: false, P: true, DIV: true },
24001
+ DIV: { BR: false, P: true, DIV: true }
24002
+ };
24003
+ if (autoListRules[enterKey] && autoListRules[enterKey][shiftEnterKey] !== undefined) {
24004
+ return autoListRules[enterKey][shiftEnterKey];
24005
+ }
24006
+ return false;
24007
+ }
24037
24008
  spaceList(e) {
24038
24009
  const range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
24039
24010
  this.saveSelection = this.parent.nodeSelection.save(range, this.parent.currentDocument);
@@ -24049,7 +24020,8 @@ class Lists {
24049
24020
  const startElementOLTest = this.testCurrentList(range);
24050
24021
  const preElementOLTest = this.testList(preElement);
24051
24022
  const nextElementOLTest = this.testList(nextElement);
24052
- if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*') {
24023
+ const nextElementBRTest = range.startContainer.previousElementSibling && range.startContainer.previousElementSibling.tagName === 'BR';
24024
+ if (!preElementOLTest && !nextElementOLTest && preElemULStart !== '*' && nextElemULStart !== '*' && (this.createAutoList(e.enterKey, e.shiftEnterKey) || !nextElementBRTest)) {
24053
24025
  const brElement = createElement('br');
24054
24026
  if (startElementOLTest) {
24055
24027
  range.startContainer.textContent = range.startContainer.textContent.slice(range.startOffset, range.startContainer.textContent.length);
@@ -28587,6 +28559,7 @@ class SelectionCommands {
28587
28559
  }
28588
28560
  else {
28589
28561
  InsertMethods.unwrap(cursorFormat);
28562
+ domSelection.setCursorPoint(docElement, cursorNode, 0);
28590
28563
  }
28591
28564
  }
28592
28565
  else {
@@ -32696,7 +32669,7 @@ class HtmlEditor {
32696
32669
  onSelectionRestore(e) {
32697
32670
  this.parent.isBlur = false;
32698
32671
  this.contentRenderer.getEditPanel().focus({ preventScroll: true });
32699
- if (isNullOrUndefined(e.items) || e.items) {
32672
+ if ((isNullOrUndefined(e.items) || e.items) && (!isNullOrUndefined(this.saveSelection))) {
32700
32673
  this.saveSelection.restore();
32701
32674
  }
32702
32675
  }
@@ -32996,7 +32969,9 @@ class HtmlEditor {
32996
32969
  const eventArgs = {
32997
32970
  callBack: null,
32998
32971
  event: e.args,
32999
- name: 'keydown-handler'
32972
+ name: 'keydown-handler',
32973
+ enterKey: this.parent.enterKey,
32974
+ shiftEnterKey: this.parent.shiftEnterKey
33000
32975
  };
33001
32976
  const actionBeginArgs = {
33002
32977
  cancel: false,
@@ -33132,6 +33107,26 @@ class HtmlEditor {
33132
33107
  if (isNullOrUndefined(this.oldRangeElement)) {
33133
33108
  return;
33134
33109
  }
33110
+ else if (findBlockElement[0].previousSibling) {
33111
+ const prevSibling = findBlockElement[0].previousSibling;
33112
+ const currentElement = findBlockElement[0];
33113
+ if (prevSibling.textContent.trim()) {
33114
+ if (prevSibling.lastChild.nodeName === 'BR') {
33115
+ prevSibling.removeChild(prevSibling.lastChild);
33116
+ }
33117
+ const cursorpointer = prevSibling.lastChild.textContent.length;
33118
+ const lastChild = prevSibling.lastChild;
33119
+ const childNodes = Array.from(currentElement.childNodes);
33120
+ for (let i = 0; i < childNodes.length; i++) {
33121
+ prevSibling.appendChild(childNodes[i].cloneNode(true));
33122
+ }
33123
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), lastChild, cursorpointer);
33124
+ currentElement.parentNode.removeChild(currentElement);
33125
+ }
33126
+ else {
33127
+ prevSibling.parentNode.removeChild(prevSibling);
33128
+ }
33129
+ }
33135
33130
  else {
33136
33131
  if (this.oldRangeElement.tagName === 'OL' || this.oldRangeElement.tagName === 'UL') {
33137
33132
  this.oldRangeElement = this.oldRangeElement.lastElementChild.lastElementChild
@@ -33154,7 +33149,7 @@ class HtmlEditor {
33154
33149
  let checkParent = false;
33155
33150
  if (this.oldRangeElement && this.oldRangeElement.nodeName !== '#text' && this.oldRangeElement.querySelectorAll('BR').length === 1) {
33156
33151
  const brElement = this.oldRangeElement.querySelector('BR');
33157
- if (brElement) {
33152
+ if (brElement && isNullOrUndefined(brElement.nextSibling)) {
33158
33153
  const brParentElement = brElement.parentNode;
33159
33154
  const currentState = this.oldRangeElement.innerHTML;
33160
33155
  this.parent.formatter.saveData(currentState);
@@ -33911,6 +33906,7 @@ class PasteCleanup {
33911
33906
  const isValueNotEmpty = tempDivElem.textContent !== '' || !isNullOrUndefined(tempDivElem.querySelector('img')) ||
33912
33907
  !isNullOrUndefined(tempDivElem.querySelector('table'));
33913
33908
  const imgElements = tempDivElem.querySelectorAll('img');
33909
+ const base = this.parent.contentModule.getDocument().location.origin;
33914
33910
  imgElements.forEach((imgElement) => {
33915
33911
  let imageFileFormat;
33916
33912
  const imgElementSrc = imgElement.getAttribute('src');
@@ -33919,7 +33915,9 @@ class PasteCleanup {
33919
33915
  imageFileFormat = imgElementSrc.split(';')[0].split('/')[1];
33920
33916
  }
33921
33917
  else {
33922
- imageFileFormat = imgElementSrc.split('.').pop().toLowerCase();
33918
+ const parsedUrl = imgElementSrc.indexOf('http') > -1 ? new URL(imgElementSrc) : new URL(imgElementSrc, base);
33919
+ const path = parsedUrl.pathname;
33920
+ imageFileFormat = path.split('.').pop().toLowerCase();
33923
33921
  }
33924
33922
  if (!isNullOrUndefined(imageFileFormat) &&
33925
33923
  allowedTypes.every((type) => imageFileFormat !== type.substring(1).toLowerCase()) &&
@@ -34177,7 +34175,11 @@ class PasteCleanup {
34177
34175
  this.parent.inputElement.contentEditable = 'true';
34178
34176
  detach(imgElem);
34179
34177
  if (popupObj) {
34180
- popupObj.close();
34178
+ this.parent.isBlur = false;
34179
+ popupObj.destroy();
34180
+ if (!isNullOrUndefined(popupObj.element)) {
34181
+ detach(popupObj.element);
34182
+ }
34181
34183
  }
34182
34184
  this.parent.trigger(imageUploadFailed, e);
34183
34185
  if (uploadObj && document.body.contains(uploadObj.element)) {
@@ -34193,7 +34195,7 @@ class PasteCleanup {
34193
34195
  this.parent.trigger(imageUploadSuccess, e, (e) => {
34194
34196
  if (!isNullOrUndefined(this.parent.insertImageSettings.path)) {
34195
34197
  const url = this.parent.insertImageSettings.path + e.file.name;
34196
- if (!this.parent.inputElement.contains(imgElem)) {
34198
+ if (!this.parent.inputElement.contains(imgElem) && imgElem.id) {
34197
34199
  const imgHtmlElems = this.parent.inputElement.querySelectorAll('#' + imgElem.id);
34198
34200
  for (let i = 0; i < imgHtmlElems.length; i++) {
34199
34201
  const imgHtmlElem = imgHtmlElems[i];
@@ -34218,13 +34220,22 @@ class PasteCleanup {
34218
34220
  });
34219
34221
  }
34220
34222
  this.popupCloseTime = setTimeout(() => {
34221
- popupObj.close();
34222
- if (!this.parent.inputElement.contains(imgElem)) {
34223
- const imgHtmlElems = this.parent.inputElement.querySelectorAll('#' + imgElem.id);
34224
- for (let i = 0; i < imgHtmlElems.length; i++) {
34225
- const imgHtmlElem = imgHtmlElems[i];
34226
- if (imgHtmlElem && imgHtmlElem.style && imgHtmlElem.style.opacity === '0.5') {
34227
- imgHtmlElem.style.opacity = '1';
34223
+ if (popupObj) {
34224
+ this.parent.isBlur = false;
34225
+ popupObj.destroy();
34226
+ if (!isNullOrUndefined(popupObj.element)) {
34227
+ detach(popupObj.element);
34228
+ }
34229
+ }
34230
+ if (!this.parent.inputElement.contains(imgElem) && (imgElem.id || imgElem.alt)) {
34231
+ const selector = imgElem.id ? `#${imgElem.id}` : `[alt="${imgElem.alt}"]`;
34232
+ if (selector) {
34233
+ const imgHtmlElems = this.parent.inputElement.querySelectorAll(selector);
34234
+ for (let i = 0; i < imgHtmlElems.length; i++) {
34235
+ const imgHtmlElem = imgHtmlElems[i];
34236
+ if (imgHtmlElem && imgHtmlElem.style && imgHtmlElem.style.opacity === '0.5') {
34237
+ imgHtmlElem.style.opacity = '1';
34238
+ }
34228
34239
  }
34229
34240
  }
34230
34241
  }
@@ -35021,13 +35032,24 @@ class Resize {
35021
35032
  this.iframeElement = this.parent.contentModule.getDocument().querySelectorAll('iframe');
35022
35033
  if (!isNullOrUndefined(this.iframeElement)) {
35023
35034
  this.iframeElement.forEach((iframe) => {
35024
- EventHandler.add(iframe.contentDocument, 'mouseup', this.stopResize, this);
35035
+ EventHandler.add(iframe, 'load', this.onIFrameLoad, this);
35025
35036
  });
35026
35037
  }
35027
35038
  this.touchStartEvent = (Browser.info.name === 'msie') ? 'pointerdown' : 'touchstart';
35028
35039
  EventHandler.add(this.resizer, 'mousedown', this.resizeStart, this);
35029
35040
  EventHandler.add(this.resizer, this.touchStartEvent, this.resizeStart, this);
35030
35041
  }
35042
+ onIFrameLoad(e) {
35043
+ const iframe = e.target;
35044
+ if (iframe.nodeName === 'IFRAME' && iframe.contentDocument) {
35045
+ EventHandler.add(iframe.contentDocument, 'mouseup', this.stopResize, this);
35046
+ }
35047
+ }
35048
+ removeMouseUpEventListener(iframe) {
35049
+ if (iframe.contentDocument) {
35050
+ EventHandler.remove(iframe.contentDocument, 'mouseup', this.stopResize);
35051
+ }
35052
+ }
35031
35053
  resizeStart(e) {
35032
35054
  this.isResizing = false;
35033
35055
  if (e.cancelable) {
@@ -35131,7 +35153,8 @@ class Resize {
35131
35153
  }
35132
35154
  if (!isNullOrUndefined(this.iframeElement)) {
35133
35155
  this.iframeElement.forEach((iframe) => {
35134
- EventHandler.remove(iframe.contentDocument, 'mouseup', this.stopResize);
35156
+ this.removeMouseUpEventListener(iframe);
35157
+ EventHandler.remove(iframe, 'load', this.onIFrameLoad);
35135
35158
  });
35136
35159
  }
35137
35160
  if (this.resizer) {
@@ -37712,7 +37735,7 @@ class EnterKeyAction {
37712
37735
  if ((this.parent.enterKey === 'P' && !shiftKey) || (this.parent.enterKey === 'DIV' && !shiftKey) ||
37713
37736
  (this.parent.shiftEnterKey === 'P' && shiftKey) ||
37714
37737
  (this.parent.shiftEnterKey === 'DIV' && shiftKey)) {
37715
- if ((this.range.startOffset === 1 && this.parent.inputElement.childNodes.length === 1 && this.parent.inputElement.childNodes[0].nodeName === 'TABLE') || (this.parent.enterKey === 'BR' && shiftKey)) {
37738
+ if ((this.range.startOffset === 1 && this.parent.inputElement.childNodes.length === 1 && this.parent.inputElement.childNodes[0].nodeName === 'TABLE')) {
37716
37739
  const newElem = this.createInsertElement(shiftKey);
37717
37740
  newElem.appendChild(this.parent.createElement('BR'));
37718
37741
  this.parent.inputElement.appendChild(newElem);
@@ -37754,7 +37777,8 @@ class EnterKeyAction {
37754
37777
  && isSplitTextEmpty && !isPreWrapApplied && !isTextWrapApplied;
37755
37778
  const isCursorAtStartPreWrapWithContent = lastCharBeforeCursor === 32
37756
37779
  && (isPreWrapApplied || isTextWrapApplied) && isSplitTextEmpty && hasContentAfterCursor;
37757
- if (isCursorAtStartNonPreWrap || isCursorAtStartPreWrapWithContent) {
37780
+ if ((isCursorAtStartNonPreWrap || isCursorAtStartPreWrapWithContent) &&
37781
+ !this.range.startContainer.previousSibling) {
37758
37782
  isFocusedFirst = true;
37759
37783
  }
37760
37784
  }
@@ -37763,15 +37787,16 @@ class EnterKeyAction {
37763
37787
  }
37764
37788
  this.removeBRElement(nearBlockNode);
37765
37789
  const fireFoxEnterAtMiddle = Browser.userAgent.indexOf('Firefox') !== -1 && this.range.startOffset === 0 && this.range.startContainer === this.range.endContainer &&
37766
- this.range.startContainer.nodeName === '#text' && !this.parent.formatter.editorManager.domNode.isBlockNode(this.range.startContainer.previousSibling) &&
37790
+ this.range.startContainer.nodeName === '#text' && !isNullOrUndefined(this.range.startContainer.previousSibling) && !this.parent.formatter.editorManager.domNode.isBlockNode(this.range.startContainer.previousSibling) &&
37767
37791
  this.range.startContainer.parentElement === this.range.startContainer.previousSibling.parentElement;
37768
37792
  const preventZeroWithSpace = ((this.range.startContainer.nodeName === '#text' && this.range.startContainer.textContent.includes('\u200B') &&
37769
37793
  this.range.startContainer.textContent.trim() === '\u200B') ||
37770
37794
  (this.range.startContainer.nodeName === '#text' && !isNullOrUndefined(this.range.startContainer.textContent[this.range.startOffset]) &&
37771
37795
  this.range.startContainer.textContent[this.range.startOffset].includes('\u200B') && this.range.startContainer.textContent[this.range.startOffset] === '\u200B' &&
37772
37796
  this.parent.inputElement.textContent[0] !== '\u200B'));
37797
+ const preventEnterkeyShiftKey = (this.range.startContainer.nodeName === '#text' || this.range.startContainer.nodeName === 'BR') && (this.range.startOffset === 0 && this.range.endOffset === 0) && this.range.startContainer.parentElement === this.parent.inputElement && this.parent.enterKey === 'BR' && shiftKey;
37773
37798
  // eslint-disable-next-line max-len
37774
- if (!preventZeroWithSpace && !fireFoxEnterAtMiddle && ((this.range.startOffset === 0 && this.range.endOffset === 0) || isFocusedFirst) &&
37799
+ if (!preventEnterkeyShiftKey && !preventZeroWithSpace && !fireFoxEnterAtMiddle && ((this.range.startOffset === 0 && this.range.endOffset === 0) || isFocusedFirst) &&
37775
37800
  !(!isNullOrUndefined(this.range.startContainer.previousSibling) &&
37776
37801
  (this.range.startContainer.previousSibling.nodeName === 'IMG' || this.range.startContainer.previousSibling.nodeName === 'BR'))) {
37777
37802
  let isNearBlockLengthZero;
@@ -37836,7 +37861,7 @@ class EnterKeyAction {
37836
37861
  }
37837
37862
  this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), insertElem.nextElementSibling, 0);
37838
37863
  }
37839
- else if (nearBlockNode.textContent.length === 0 && !(!isNullOrUndefined(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG' ||
37864
+ else if (nearBlockNode !== this.parent.inputElement && nearBlockNode.textContent.length === 0 && !(!isNullOrUndefined(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG' ||
37840
37865
  (nearBlockNode.querySelectorAll('video').length > 0) || (nearBlockNode.querySelectorAll('audio').length > 0) || (nearBlockNode.querySelectorAll('img').length > 0))) {
37841
37866
  if (!isNullOrUndefined(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {
37842
37867
  const newElem = this.parent.formatter.editorManager.nodeCutter.SplitNode(this.range, nearBlockNode, false).cloneNode(true);
@@ -37892,6 +37917,36 @@ class EnterKeyAction {
37892
37917
  this.parent.videoModule.hideVideoQuickToolbar();
37893
37918
  }
37894
37919
  }
37920
+ else if (this.parent.enterKey === 'BR' && shiftKey && this.range.startContainer.nodeType === Node.TEXT_NODE && this.range.startContainer.parentElement && this.range.startContainer.parentElement === this.parent.inputElement) {
37921
+ const range = this.range;
37922
+ const startContainer = range.startContainer;
37923
+ const startOffset = range.startOffset;
37924
+ const newElement = this.parent.createElement(this.parent.shiftEnterKey);
37925
+ if (startContainer.nodeType === Node.TEXT_NODE && range.endOffset !== 0 && range.startOffset !== 0) {
37926
+ const textNode = startContainer;
37927
+ if (startOffset < textNode.length) {
37928
+ const newTextNode = textNode.splitText(startOffset);
37929
+ newElement.appendChild(newTextNode);
37930
+ }
37931
+ else {
37932
+ newElement.innerHTML = '<br>';
37933
+ }
37934
+ textNode.parentNode.insertBefore(newElement, textNode.nextSibling);
37935
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), newElement, 0);
37936
+ }
37937
+ else if (startOffset === 0 && range.endOffset === 0) {
37938
+ newElement.innerHTML = '<br>';
37939
+ if (range.endOffset === startContainer.textContent.length) {
37940
+ const brElement = this.parent.createElement('br');
37941
+ startContainer.parentNode.insertBefore(brElement, startContainer);
37942
+ }
37943
+ startContainer.parentNode.insertBefore(newElement, startContainer);
37944
+ const cursorTarget = (range.endOffset === startContainer.textContent.length)
37945
+ ? newElement : newElement.nextSibling;
37946
+ startContainer.parentNode.insertBefore(newElement, startContainer);
37947
+ this.parent.formatter.editorManager.nodeSelection.setCursorPoint(this.parent.contentModule.getDocument(), cursorTarget, 0);
37948
+ }
37949
+ }
37895
37950
  else {
37896
37951
  const newElem = this.parent.formatter.editorManager.nodeCutter.SplitNode(this.range, nearBlockNode, true);
37897
37952
  if (!isNullOrUndefined(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&
@@ -39754,7 +39809,7 @@ let RichTextEditor = class RichTextEditor extends Component {
39754
39809
  this.placeHolderWrapper.innerHTML = this.placeholder;
39755
39810
  if (this.inputElement.textContent.length === 0 && this.inputElement.childNodes.length < 2 && !isNullOrUndefined(this.inputElement.firstChild) && (this.inputElement.firstChild.nodeName === 'BR' ||
39756
39811
  ((this.inputElement.firstChild.nodeName === 'P' || this.inputElement.firstChild.nodeName === 'DIV') && !isNullOrUndefined(this.inputElement.firstChild.firstChild) &&
39757
- this.inputElement.firstChild.firstChild.nodeName === 'BR'))) {
39812
+ this.inputElement.firstChild.childNodes.length < 2 && this.inputElement.firstChild.firstChild.nodeName === 'BR'))) {
39758
39813
  this.placeHolderWrapper.classList.add('enabled');
39759
39814
  }
39760
39815
  else {
@@ -40488,7 +40543,6 @@ let RichTextEditor = class RichTextEditor extends Component {
40488
40543
  const value = this.getUpdatedValue();
40489
40544
  this.setProperties({ value: value });
40490
40545
  this.valueContainer.value = this.value;
40491
- this.notify(toolbarRefresh, { args: e, documentNode: document });
40492
40546
  this.isValueChangeBlurhandler = true;
40493
40547
  this.invokeChangeEvent();
40494
40548
  this.isFocusOut = true;