@syncfusion/ej2-richtexteditor 20.4.52 → 21.1.35

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 (140) hide show
  1. package/CHANGELOG.md +32 -2
  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 +1623 -639
  6. package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
  7. package/dist/es6/ej2-richtexteditor.es5.js +1638 -646
  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 +13 -13
  13. package/src/common/config.js +3 -1
  14. package/src/common/constant.d.ts +6 -0
  15. package/src/common/constant.js +6 -0
  16. package/src/common/util.d.ts +2 -1
  17. package/src/common/util.js +15 -6
  18. package/src/editor-manager/base/editor-manager.d.ts +2 -0
  19. package/src/editor-manager/base/editor-manager.js +6 -1
  20. package/src/editor-manager/base/enum.d.ts +14 -0
  21. package/src/editor-manager/base/interface.d.ts +34 -0
  22. package/src/editor-manager/plugin/clearformat.js +13 -4
  23. package/src/editor-manager/plugin/format-painter-actions.d.ts +63 -0
  24. package/src/editor-manager/plugin/format-painter-actions.js +474 -0
  25. package/src/editor-manager/plugin/image.js +0 -1
  26. package/src/editor-manager/plugin/inserthtml-exec.js +1 -1
  27. package/src/editor-manager/plugin/inserthtml.d.ts +1 -1
  28. package/src/editor-manager/plugin/inserthtml.js +18 -10
  29. package/src/editor-manager/plugin/isformatted.js +1 -0
  30. package/src/editor-manager/plugin/link.js +0 -1
  31. package/src/editor-manager/plugin/lists.js +1 -1
  32. package/src/editor-manager/plugin/ms-word-clean-up.js +57 -19
  33. package/src/editor-manager/plugin/selection-commands.d.ts +4 -1
  34. package/src/editor-manager/plugin/selection-commands.js +70 -9
  35. package/src/editor-manager/plugin/video.js +2 -0
  36. package/src/editor-manager/plugin.d.ts +1 -0
  37. package/src/editor-manager/plugin.js +1 -0
  38. package/src/global.js +1 -1
  39. package/src/rich-text-editor/actions/base-quick-toolbar.d.ts +1 -0
  40. package/src/rich-text-editor/actions/base-quick-toolbar.js +21 -1
  41. package/src/rich-text-editor/actions/base-toolbar.js +33 -10
  42. package/src/rich-text-editor/actions/enter-key.js +23 -16
  43. package/src/rich-text-editor/actions/format-painter.d.ts +24 -0
  44. package/src/rich-text-editor/actions/format-painter.js +142 -0
  45. package/src/rich-text-editor/actions/full-screen.js +0 -1
  46. package/src/rich-text-editor/actions/html-editor.d.ts +1 -0
  47. package/src/rich-text-editor/actions/html-editor.js +117 -97
  48. package/src/rich-text-editor/actions/paste-clean-up.js +2 -2
  49. package/src/rich-text-editor/actions/quick-toolbar.js +8 -1
  50. package/src/rich-text-editor/actions/toolbar.js +10 -0
  51. package/src/rich-text-editor/actions.d.ts +1 -0
  52. package/src/rich-text-editor/actions.js +1 -0
  53. package/src/rich-text-editor/base/constant.d.ts +10 -0
  54. package/src/rich-text-editor/base/constant.js +10 -0
  55. package/src/rich-text-editor/base/enum.d.ts +4 -0
  56. package/src/rich-text-editor/base/interface.d.ts +30 -3
  57. package/src/rich-text-editor/base/interface.js +12 -0
  58. package/src/rich-text-editor/base/rich-text-editor-model.d.ts +30 -4
  59. package/src/rich-text-editor/base/rich-text-editor.d.ts +35 -5
  60. package/src/rich-text-editor/base/rich-text-editor.js +46 -10
  61. package/src/rich-text-editor/base/util.js +2 -0
  62. package/src/rich-text-editor/formatter/formatter.js +22 -13
  63. package/src/rich-text-editor/formatter/html-formatter.d.ts +5 -3
  64. package/src/rich-text-editor/formatter/html-formatter.js +7 -5
  65. package/src/rich-text-editor/models/default-locale.js +4 -2
  66. package/src/rich-text-editor/models/items.d.ts +3 -0
  67. package/src/rich-text-editor/models/items.js +32 -0
  68. package/src/rich-text-editor/models/toolbar-settings-model.d.ts +29 -1
  69. package/src/rich-text-editor/models/toolbar-settings.d.ts +24 -1
  70. package/src/rich-text-editor/models/toolbar-settings.js +20 -0
  71. package/src/rich-text-editor/renderer/audio-module.js +6 -3
  72. package/src/rich-text-editor/renderer/image-module.js +11 -6
  73. package/src/rich-text-editor/renderer/link-module.js +2 -1
  74. package/src/rich-text-editor/renderer/table-module.js +18 -6
  75. package/src/rich-text-editor/renderer/toolbar-renderer.js +10 -1
  76. package/src/rich-text-editor/renderer/video-module.js +8 -5
  77. package/src/rich-text-editor/renderer/view-source.js +1 -1
  78. package/styles/bootstrap-dark.css +31 -1
  79. package/styles/bootstrap.css +31 -1
  80. package/styles/bootstrap4.css +31 -1
  81. package/styles/bootstrap5-dark.css +32 -2
  82. package/styles/bootstrap5.css +32 -2
  83. package/styles/fabric-dark.css +31 -1
  84. package/styles/fabric.css +31 -1
  85. package/styles/fluent-dark.css +34 -4
  86. package/styles/fluent.css +34 -4
  87. package/styles/highcontrast-light.css +31 -1
  88. package/styles/highcontrast.css +31 -1
  89. package/styles/material-dark.css +31 -1
  90. package/styles/material.css +31 -1
  91. package/styles/rich-text-editor/_bootstrap-dark-definition.scss +25 -1
  92. package/styles/rich-text-editor/_bootstrap-definition.scss +25 -1
  93. package/styles/rich-text-editor/_bootstrap4-definition.scss +25 -1
  94. package/styles/rich-text-editor/_bootstrap5-definition.scss +28 -5
  95. package/styles/rich-text-editor/_fabric-dark-definition.scss +25 -1
  96. package/styles/rich-text-editor/_fabric-definition.scss +25 -1
  97. package/styles/rich-text-editor/_fluent-definition.scss +30 -7
  98. package/styles/rich-text-editor/_fusionnew-definition.scss +26 -3
  99. package/styles/rich-text-editor/_highcontrast-definition.scss +25 -1
  100. package/styles/rich-text-editor/_highcontrast-light-definition.scss +25 -1
  101. package/styles/rich-text-editor/_layout.scss +47 -15
  102. package/styles/rich-text-editor/_material-dark-definition.scss +26 -1
  103. package/styles/rich-text-editor/_material-definition.scss +25 -1
  104. package/styles/rich-text-editor/_tailwind-definition.scss +28 -5
  105. package/styles/rich-text-editor/_theme.scss +54 -6
  106. package/styles/rich-text-editor/bootstrap-dark.css +31 -1
  107. package/styles/rich-text-editor/bootstrap.css +31 -1
  108. package/styles/rich-text-editor/bootstrap4.css +31 -1
  109. package/styles/rich-text-editor/bootstrap5-dark.css +32 -2
  110. package/styles/rich-text-editor/bootstrap5.css +32 -2
  111. package/styles/rich-text-editor/fabric-dark.css +31 -1
  112. package/styles/rich-text-editor/fabric.css +31 -1
  113. package/styles/rich-text-editor/fluent-dark.css +34 -4
  114. package/styles/rich-text-editor/fluent.css +34 -4
  115. package/styles/rich-text-editor/highcontrast-light.css +31 -1
  116. package/styles/rich-text-editor/highcontrast.css +31 -1
  117. package/styles/rich-text-editor/icons/_bootstrap-dark.scss +8 -0
  118. package/styles/rich-text-editor/icons/_bootstrap.scss +8 -0
  119. package/styles/rich-text-editor/icons/_bootstrap4.scss +8 -0
  120. package/styles/rich-text-editor/icons/_bootstrap5.scss +8 -0
  121. package/styles/rich-text-editor/icons/_fabric-dark.scss +8 -0
  122. package/styles/rich-text-editor/icons/_fabric.scss +8 -0
  123. package/styles/rich-text-editor/icons/_fluent.scss +8 -0
  124. package/styles/rich-text-editor/icons/_fusionnew.scss +8 -0
  125. package/styles/rich-text-editor/icons/_highcontrast-light.scss +8 -0
  126. package/styles/rich-text-editor/icons/_highcontrast.scss +8 -0
  127. package/styles/rich-text-editor/icons/_material-dark.scss +8 -0
  128. package/styles/rich-text-editor/icons/_material.scss +8 -0
  129. package/styles/rich-text-editor/icons/_material3.scss +8 -0
  130. package/styles/rich-text-editor/icons/_tailwind.scss +8 -0
  131. package/styles/rich-text-editor/material-dark.css +31 -1
  132. package/styles/rich-text-editor/material.css +31 -1
  133. package/styles/rich-text-editor/tailwind-dark.css +31 -1
  134. package/styles/rich-text-editor/tailwind.css +31 -1
  135. package/styles/tailwind-dark.css +31 -1
  136. package/styles/tailwind.css +31 -1
  137. package/GitLeaksReport.json +0 -1
  138. package/gitleaks-ci/gitleaks +0 -0
  139. package/gitleaks-ci.tar.gz +0 -0
  140. package/styles/rich-text-editor/_material3-definition.scss +0 -196
@@ -0,0 +1,474 @@
1
+ import { closest, createElement, detach, isNullOrUndefined as isNOU, removeClass } from '@syncfusion/ej2-base';
2
+ import * as EVENTS from '../../common/constant';
3
+ import { SelectionCommands } from '../plugin';
4
+ var FormatPainterActions = /** @class */ (function () {
5
+ function FormatPainterActions(parent, options) {
6
+ this.parent = parent;
7
+ this.settings = options;
8
+ this.addEventListener();
9
+ this.setDeniedFormats();
10
+ }
11
+ FormatPainterActions.prototype.addEventListener = function () {
12
+ this.parent.observer.on(EVENTS.FORMAT_PAINTER_ACTIONS, this.actionHandler, this);
13
+ };
14
+ FormatPainterActions.prototype.actionHandler = function (args) {
15
+ if (!isNOU(args) && !isNOU(args.item) && !isNOU(args.item.formatPainterAction)) {
16
+ switch (args.item.formatPainterAction) {
17
+ case 'format-copy':
18
+ this.copyAction();
19
+ break;
20
+ case 'format-paste':
21
+ this.pasteAction();
22
+ break;
23
+ case 'escape':
24
+ this.escapeAction();
25
+ break;
26
+ }
27
+ }
28
+ };
29
+ FormatPainterActions.prototype.generateElement = function () {
30
+ var copyCollection = this.copyCollection.slice(); // To clone without reversing the collcection array
31
+ copyCollection.reverse();
32
+ var length = copyCollection.length;
33
+ var elemCollection = createElement('div', { className: 'e-format-paste-wrapper' });
34
+ var lastAppendChild;
35
+ for (var i = 0; i < length; i++) {
36
+ var _a = copyCollection[i], attrs = _a.attrs, className = _a.className, styles = _a.styles, tagName = _a.tagName;
37
+ var elem = createElement(tagName);
38
+ if (className !== '') {
39
+ elem.className = className;
40
+ }
41
+ for (var i_1 = 0; i_1 < attrs.length; i_1++) {
42
+ var property = attrs[i_1].name;
43
+ var value = attrs[i_1].value;
44
+ elem.setAttribute(property, value);
45
+ }
46
+ for (var i_2 = 0; i_2 < styles.length; i_2++) {
47
+ var property = styles[i_2].property;
48
+ var value = styles[i_2].value;
49
+ var priority = styles[i_2].priority;
50
+ elem.style.setProperty(property, value, priority);
51
+ }
52
+ if (elemCollection.childElementCount === 0) {
53
+ elemCollection.append(elem);
54
+ lastAppendChild = elem;
55
+ }
56
+ else {
57
+ lastAppendChild.append(elem);
58
+ lastAppendChild = elem;
59
+ }
60
+ }
61
+ var elemChild = this.removeDeniedFormats(elemCollection);
62
+ var currentElem = elemChild;
63
+ while (currentElem) {
64
+ if (currentElem.firstChild === null) {
65
+ lastAppendChild = currentElem;
66
+ currentElem = undefined;
67
+ }
68
+ else {
69
+ currentElem = currentElem.firstChild;
70
+ }
71
+ }
72
+ this.newElem = elemChild;
73
+ this.newElemLastChild = lastAppendChild;
74
+ };
75
+ FormatPainterActions.prototype.pasteAction = function () {
76
+ if (isNOU(this.copyCollection) || this.copyCollection.length === 0) {
77
+ this.paintPlainTextFormat();
78
+ return;
79
+ }
80
+ this.insertFormatNode(this.newElem, this.newElemLastChild);
81
+ this.parent.undoRedoManager.saveData();
82
+ };
83
+ FormatPainterActions.prototype.removeDeniedFormats = function (parentElement) {
84
+ if (!isNOU(this.deniedFormatsCollection) && this.deniedFormatsCollection.length > 0) {
85
+ var deniedPropArray = this.deniedFormatsCollection;
86
+ var length_1 = deniedPropArray.length;
87
+ for (var i = 0; i < length_1; i++) {
88
+ var tag = deniedPropArray[i].tag;
89
+ if (deniedPropArray[i].tag) {
90
+ var elementsList = parentElement.querySelectorAll(tag);
91
+ for (var j = 0; j < elementsList.length; j++) {
92
+ if (deniedPropArray[i].classes.length > 0) {
93
+ var classes = deniedPropArray[i].classes;
94
+ var classLength = classes.length;
95
+ for (var k = 0; k < classLength; k++) {
96
+ if (elementsList[j].classList.contains(classes[k])) {
97
+ removeClass([elementsList[j]], classes[k]);
98
+ }
99
+ }
100
+ if (elementsList[j].classList.length === 0) {
101
+ elementsList[j].removeAttribute('class');
102
+ }
103
+ }
104
+ if (deniedPropArray[i].styles.length > 0) {
105
+ var styles = deniedPropArray[i].styles;
106
+ var styleLength = styles.length;
107
+ for (var k = 0; k < styleLength; k++) {
108
+ elementsList[j].style.removeProperty(styles[k]);
109
+ }
110
+ if (elementsList[j].style.length === 0) {
111
+ elementsList[j].removeAttribute('style');
112
+ }
113
+ }
114
+ if (deniedPropArray[i].attributes.length > 0) {
115
+ var attributes = deniedPropArray[i].attributes;
116
+ var attributeLength = attributes.length;
117
+ for (var k = 0; k < attributeLength; k++) {
118
+ elementsList[j].removeAttribute(attributes[k]);
119
+ }
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ return parentElement.firstElementChild;
126
+ };
127
+ FormatPainterActions.prototype.copyAction = function () {
128
+ var copyCollection = [];
129
+ var range = this.parent.nodeSelection.getRange(document);
130
+ var parentElem = range.startContainer.parentElement;
131
+ var currentContext = this.findCurrentContext(parentElem);
132
+ var allowedRulesArray = this.settings.allowedFormats.split(';');
133
+ for (var i = 0; i < allowedRulesArray.length; i++) {
134
+ allowedRulesArray[i] = allowedRulesArray[i].trim();
135
+ }
136
+ var _a = this.getRangeParentElem(currentContext, range), rangeParentElem = _a[0], context = _a[1];
137
+ if (currentContext === null) {
138
+ currentContext = context;
139
+ }
140
+ if (!isNOU(currentContext) && this.settings.allowedContext.indexOf(currentContext) > -1) {
141
+ if (range.startContainer.nodeName === '#text') {
142
+ parentElem = range.startContainer.parentElement;
143
+ }
144
+ var lastElement = parentElem;
145
+ do {
146
+ if (allowedRulesArray.indexOf(parentElem.nodeName.toLowerCase()) > -1) {
147
+ var allAttributes = parentElem.attributes;
148
+ var attribute = [];
149
+ for (var i = 0; i < allAttributes.length; i++) {
150
+ if (allAttributes[i].name !== 'class' && allAttributes[i].name !== 'style') {
151
+ attribute.push(allAttributes[i]);
152
+ }
153
+ }
154
+ var classes = parentElem.className;
155
+ var allStyles = parentElem.style;
156
+ var styleProp = [];
157
+ for (var i = 0; i < allStyles.length; i++) {
158
+ var property = allStyles[i];
159
+ var value = allStyles.getPropertyValue(property);
160
+ var priority = allStyles.getPropertyPriority(property);
161
+ styleProp.push({ property: property, value: value, priority: priority });
162
+ }
163
+ copyCollection.push({
164
+ attrs: attribute, className: classes, styles: styleProp, tagName: parentElem.nodeName
165
+ });
166
+ }
167
+ if (rangeParentElem === parentElem) {
168
+ parentElem = undefined;
169
+ }
170
+ else if (!isNOU(parentElem.parentElement)) {
171
+ parentElem = parentElem.parentElement;
172
+ }
173
+ if (lastElement === parentElem) {
174
+ break;
175
+ }
176
+ } while (!isNOU(parentElem) || parentElem === this.parent.editableElement);
177
+ this.copyCollection = copyCollection;
178
+ }
179
+ this.generateElement();
180
+ };
181
+ FormatPainterActions.prototype.getRangeParentElem = function (currentContext, range) {
182
+ var startContainer = range.startContainer;
183
+ var rangeParentELem;
184
+ if (startContainer.nodeType === 3) {
185
+ startContainer = startContainer.parentElement;
186
+ }
187
+ switch (currentContext) {
188
+ case 'Table':
189
+ rangeParentELem = closest(startContainer, 'td');
190
+ if (isNOU(rangeParentELem)) {
191
+ rangeParentELem = closest(startContainer, 'th');
192
+ }
193
+ break;
194
+ case 'List':
195
+ rangeParentELem = closest(startContainer, 'li');
196
+ break;
197
+ case 'Text':
198
+ rangeParentELem = closest(startContainer, 'p');
199
+ break;
200
+ }
201
+ if (isNOU(rangeParentELem)) {
202
+ var nearBlockParentName = this.getNearestBlockParentElement(range);
203
+ if (!isNOU(nearBlockParentName) && nearBlockParentName !== 'UL' &&
204
+ nearBlockParentName !== 'OL' && nearBlockParentName !== 'LI') {
205
+ rangeParentELem = closest(startContainer, nearBlockParentName);
206
+ currentContext = 'Text';
207
+ }
208
+ }
209
+ if (currentContext === 'List') {
210
+ rangeParentELem = rangeParentELem.parentElement;
211
+ }
212
+ return [rangeParentELem, currentContext];
213
+ };
214
+ FormatPainterActions.prototype.getNearestBlockParentElement = function (range) {
215
+ var node = range.commonAncestorContainer;
216
+ if (node.nodeType === 3) {
217
+ node = node.parentNode;
218
+ }
219
+ // iterate untill the content editable div
220
+ while (node && node !== this.parent.editableElement) {
221
+ // If true return the block node name.
222
+ if (!isNOU(node) && this.isBlockElement(node)) {
223
+ return node.nodeName;
224
+ }
225
+ // if false re assign node to parent node
226
+ node = node.parentNode;
227
+ }
228
+ return null;
229
+ };
230
+ FormatPainterActions.prototype.isBlockElement = function (node) {
231
+ var blockTags = ['P', 'DIV', 'UL', 'OL', 'LI', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6',
232
+ 'ADDRESS', 'ARTICLE', 'ASIDE', 'BLOCKQUOTE', 'FIGCAPTION', 'FIGURE', 'FOOTER', 'HEADER',
233
+ 'HR', 'MAIN', 'NAV', 'SECTION', 'SUMMARY', 'PRE'];
234
+ return blockTags.indexOf(node.nodeName) > -1;
235
+ };
236
+ FormatPainterActions.prototype.escapeAction = function () {
237
+ this.copyCollection = [];
238
+ };
239
+ FormatPainterActions.prototype.paintPlainTextFormat = function () {
240
+ var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
241
+ var domSelection = this.parent.nodeSelection;
242
+ var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :
243
+ domSelection.getSelectionNodeCollectionBr(range);
244
+ var isInValid;
245
+ if (nodes.length > 1) {
246
+ for (var i = 0; i < nodes.length; i++) {
247
+ isInValid = this.validateELementTag(nodes[i]);
248
+ }
249
+ }
250
+ else {
251
+ isInValid = this.validateELementTag(range.startContainer) && this.validateELementTag(range.endContainer);
252
+ }
253
+ if (!isInValid) {
254
+ this.parent.execCommand('Clear', 'ClearFormat', null, null);
255
+ }
256
+ };
257
+ FormatPainterActions.prototype.validateELementTag = function (node) {
258
+ var INVALID_TAGS = ['A', 'AUDIO', 'IMG', 'VIDEO', 'IFRAME'];
259
+ if (node.nodeType === 3) {
260
+ node = node.parentElement;
261
+ }
262
+ return INVALID_TAGS.indexOf(node.tagName) > -1;
263
+ };
264
+ FormatPainterActions.prototype.findCurrentContext = function (parentElem) {
265
+ if (closest(parentElem, 'td') || closest(parentElem, 'tr') || closest(parentElem, 'tbody')) {
266
+ return 'Table';
267
+ }
268
+ else if (closest(parentElem, 'li')) {
269
+ return 'List';
270
+ }
271
+ else if (closest(parentElem, 'p')) {
272
+ return 'Text';
273
+ }
274
+ return null;
275
+ };
276
+ FormatPainterActions.prototype.insertFormatNode = function (elem, lastChild) {
277
+ var endNode = this.parent.editableElement;
278
+ var docElement = this.parent.currentDocument;
279
+ var domSelection = this.parent.nodeSelection;
280
+ var clonedElem = elem.cloneNode(true);
281
+ var childElem = clonedElem.firstChild;
282
+ var inlineElement;
283
+ while (childElem) {
284
+ if (this.isBlockElement(childElem)) {
285
+ childElem = childElem.firstChild;
286
+ }
287
+ else {
288
+ inlineElement = childElem.parentNode.removeChild(childElem);
289
+ break;
290
+ }
291
+ }
292
+ var formatValues = {
293
+ element: inlineElement,
294
+ lastChild: lastChild
295
+ };
296
+ SelectionCommands.applyFormat(docElement, null, endNode, 'P', 'formatPainter', null, formatValues);
297
+ var isFullNodeSelected;
298
+ var range = this.parent.nodeSelection.getRange(docElement);
299
+ var isCollapsed = range.collapsed;
300
+ var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :
301
+ domSelection.getSelectionNodeCollectionBr(range);
302
+ if (nodes.length === 1) {
303
+ while (!this.isBlockElement(nodes[0])) {
304
+ nodes[0] = nodes[0].parentElement;
305
+ }
306
+ isFullNodeSelected = nodes[0].textContent.trim() === range.commonAncestorContainer.wholeText.trim();
307
+ }
308
+ if (this.isBlockElement(elem) && isCollapsed || nodes.length > 1 || isFullNodeSelected) {
309
+ this.insertBlockNode(elem, range, docElement, endNode, nodes);
310
+ }
311
+ };
312
+ FormatPainterActions.prototype.insertBlockNode = function (element, range, docElement, endNode, nodes) {
313
+ var domSelection = this.parent.nodeSelection;
314
+ var listElement; // To clone to multiple list elements
315
+ var cloneListParentNode;
316
+ if (element.nodeName === 'UL' || element.nodeName === 'OL') {
317
+ cloneListParentNode = element.cloneNode(true);
318
+ listElement = cloneListParentNode.firstChild;
319
+ }
320
+ var textNode = range.startContainer; // To set cursor position
321
+ for (var index = 0; index < nodes.length; index++) {
322
+ var lastTextNode = nodes[index];
323
+ if (nodes[index].nodeType === 3) {
324
+ nodes[index] = nodes[index].parentElement;
325
+ }
326
+ while (!this.isBlockElement(nodes[index])) {
327
+ nodes[index] = nodes[index].parentElement;
328
+ }
329
+ var cloneParentNode = void 0;
330
+ if (!isNOU(cloneListParentNode)) {
331
+ cloneParentNode = listElement.cloneNode(true);
332
+ }
333
+ else {
334
+ cloneParentNode = element.cloneNode(true);
335
+ }
336
+ // Appending all the child elements
337
+ while (nodes[index].firstChild) {
338
+ if (cloneParentNode.nodeName === 'LI') {
339
+ cloneParentNode.appendChild(nodes[index].firstChild);
340
+ }
341
+ else {
342
+ // Except list nodes other block nodes replaced here
343
+ if (nodes[index].nodeType === 3) {
344
+ cloneParentNode.appendChild(nodes[index].firstChild);
345
+ }
346
+ else {
347
+ cloneParentNode.innerHTML = nodes[index].innerHTML;
348
+ nodes[index].innerHTML = '';
349
+ }
350
+ nodes[index] = nodes[index].parentNode.replaceChild(cloneParentNode, nodes[index]);
351
+ }
352
+ }
353
+ if (cloneParentNode.nodeName === 'LI') {
354
+ // Appending the li nodes to the ol or ul node
355
+ cloneListParentNode.append(cloneParentNode);
356
+ if (index === 0) {
357
+ var nodeName = nodes[index].nodeName;
358
+ nodes[index] = nodes[index].parentNode.replaceChild(cloneListParentNode, nodes[index]);
359
+ var parent_1 = nodeName === 'LI' ? cloneListParentNode.parentElement
360
+ : cloneListParentNode;
361
+ // Splicing and then inserting the node to previous element sibling of the Listparent.parent
362
+ this.parent.nodeCutter.SplitNode(range, parent_1, true);
363
+ if (!isNOU(parent_1.previousElementSibling)) {
364
+ parent_1.parentNode.insertBefore(cloneListParentNode, parent_1.nextElementSibling);
365
+ }
366
+ else {
367
+ parent_1.parentElement.insertBefore(cloneListParentNode, parent_1);
368
+ }
369
+ }
370
+ detach(nodes[index]);
371
+ }
372
+ /**Removing the inserted block node in list and appending to previous element sibling */
373
+ if (cloneParentNode.nodeName !== 'LI' && (cloneParentNode.parentElement.nodeName === 'OL' ||
374
+ cloneParentNode.parentElement.nodeName === 'UL')) {
375
+ var parent_2 = cloneParentNode.parentElement;
376
+ // Cutting single ul or ol to two ul or ol based on the range
377
+ this.parent.nodeCutter.SplitNode(range, parent_2, true);
378
+ if (!isNOU(parent_2.previousElementSibling)) {
379
+ parent_2.previousElementSibling.after(cloneParentNode);
380
+ }
381
+ else {
382
+ parent_2.parentElement.prepend(cloneParentNode);
383
+ }
384
+ }
385
+ nodes[index] = lastTextNode;
386
+ }
387
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
388
+ !isNOU(listElement) ? detach(listElement) : false;
389
+ this.cleanEmptyLists();
390
+ if (nodes.length > 1) {
391
+ var startSelectNode = nodes[0];
392
+ var endSelectNode = nodes[nodes.length - 1];
393
+ domSelection.setSelectionText(docElement, startSelectNode, endSelectNode, 0, endSelectNode.textContent.length);
394
+ }
395
+ else {
396
+ domSelection.setCursorPoint(docElement, textNode, textNode.textContent.length);
397
+ }
398
+ };
399
+ FormatPainterActions.prototype.cleanEmptyLists = function () {
400
+ var listElem = this.parent.editableElement.querySelectorAll('ol, ul');
401
+ for (var i = 0; i < listElem.length; i++) {
402
+ if (listElem[i].textContent.trim() === '') {
403
+ detach(listElem[i]);
404
+ }
405
+ }
406
+ };
407
+ FormatPainterActions.prototype.setDeniedFormats = function () {
408
+ var deniedFormatsCollection = [];
409
+ if (isNOU(this.settings) || isNOU(this.settings.deniedFormats)) {
410
+ return;
411
+ }
412
+ var deniedFormats = this.settings.deniedFormats.split(';');
413
+ var length = deniedFormats.length;
414
+ for (var i = 0; i < length; i++) {
415
+ var formatString = deniedFormats[i];
416
+ if (formatString !== '') {
417
+ formatString.trim();
418
+ var collection = this.makeDeniedFormatsCollection(formatString);
419
+ if (!isNOU(collection)) {
420
+ deniedFormatsCollection.push(collection);
421
+ }
422
+ }
423
+ }
424
+ this.deniedFormatsCollection = deniedFormatsCollection;
425
+ };
426
+ FormatPainterActions.prototype.makeDeniedFormatsCollection = function (value) {
427
+ var openParenIndex = value.indexOf('(');
428
+ var closeParenIndex = value.indexOf(')');
429
+ var openBracketIndex = value.indexOf('[');
430
+ var closeBracketIndex = value.indexOf(']');
431
+ var openBraceIndex = value.indexOf('{');
432
+ var closeBraceIndex = value.indexOf('}');
433
+ var classes = [];
434
+ var attributes = '';
435
+ var styles = '';
436
+ var tagName = '';
437
+ var classList = [];
438
+ var attributesList = [];
439
+ var stylesList = [];
440
+ if (openParenIndex > -1 && closeParenIndex > -1) {
441
+ classes = value.substring(openParenIndex + 1, closeParenIndex).split(' ');
442
+ classList = classes[0].split(')')[0].split(',');
443
+ }
444
+ if (openBracketIndex > -1 && closeBracketIndex > -1) {
445
+ attributes = value.substring(openBracketIndex + 1, closeBracketIndex);
446
+ attributesList = attributes.split(',');
447
+ }
448
+ if (openBraceIndex > -1 && closeBraceIndex > -1) {
449
+ styles = value.substring(openBraceIndex + 1, closeBraceIndex);
450
+ stylesList = styles.split(',');
451
+ }
452
+ var openIndexArray = [openParenIndex, openBracketIndex, openBraceIndex];
453
+ openIndexArray = openIndexArray.filter(function (index) { return index > -1; });
454
+ var len = openIndexArray.length;
455
+ var min;
456
+ if (len === 1) {
457
+ min = openIndexArray[0];
458
+ }
459
+ else if (len === 2) {
460
+ min = Math.min(openIndexArray[0], openIndexArray[1]);
461
+ }
462
+ else if (len === 3) {
463
+ min = Math.min(openIndexArray[0], openIndexArray[1], openIndexArray[2]);
464
+ }
465
+ tagName = value.substring(0, min);
466
+ tagName.trim();
467
+ return ({
468
+ tag: tagName, styles: stylesList, classes: classList,
469
+ attributes: attributesList
470
+ });
471
+ };
472
+ return FormatPainterActions;
473
+ }());
474
+ export { FormatPainterActions };
@@ -182,7 +182,6 @@ var ImageCommand = /** @class */ (function () {
182
182
  this.callBack(e);
183
183
  };
184
184
  ImageCommand.prototype.openImageLink = function (e) {
185
- // eslint-disable-next-line security/detect-non-literal-fs-filename
186
185
  document.defaultView.open(e.item.url, e.item.target);
187
186
  this.callBack(e);
188
187
  };
@@ -22,7 +22,7 @@ var InsertHtmlExec = /** @class */ (function () {
22
22
  this.parent.observer.on(CONSTANT.INSERTHTML_TYPE, this.applyHtml, this);
23
23
  };
24
24
  InsertHtmlExec.prototype.applyHtml = function (e) {
25
- InsertHtml.Insert(this.parent.currentDocument, e.value, this.parent.editableElement, true);
25
+ InsertHtml.Insert(this.parent.currentDocument, e.value, this.parent.editableElement, true, e.enterAction);
26
26
  if (e.subCommand === 'pasteCleanup') {
27
27
  var pastedElements = this.parent.editableElement.querySelectorAll('.pasteContent_RTE');
28
28
  var allPastedElements = [].slice.call(pastedElements);
@@ -13,7 +13,7 @@ export declare class InsertHtml {
13
13
  */
14
14
  static inlineNode: string[];
15
15
  static contentsDeleted: boolean;
16
- static Insert(docElement: Document, insertNode: Node | string, editNode?: Element, isExternal?: boolean): void;
16
+ static Insert(docElement: Document, insertNode: Node | string, editNode?: Element, isExternal?: boolean, enterAction?: string): void;
17
17
  private static pasteInsertHTML;
18
18
  private static placeCursorEnd;
19
19
  private static getNodeCollection;
@@ -13,7 +13,7 @@ import { updateTextNode } from './../../common/util';
13
13
  var InsertHtml = /** @class */ (function () {
14
14
  function InsertHtml() {
15
15
  }
16
- InsertHtml.Insert = function (docElement, insertNode, editNode, isExternal) {
16
+ InsertHtml.Insert = function (docElement, insertNode, editNode, isExternal, enterAction) {
17
17
  var node;
18
18
  if (typeof insertNode === 'string') {
19
19
  var divNode = document.createElement('div');
@@ -35,7 +35,8 @@ var InsertHtml = /** @class */ (function () {
35
35
  var nodeCutter = new NodeCutter();
36
36
  var range = nodeSelection.getRange(docElement);
37
37
  if (range.startContainer === editNode && range.startContainer === range.endContainer && range.startOffset === 0 &&
38
- range.startOffset === range.endOffset && editNode.textContent.length === 0 && editNode.children[0].tagName === 'P') {
38
+ range.startOffset === range.endOffset && editNode.textContent.length === 0 &&
39
+ (editNode.children[0].tagName === 'P' || (editNode.children[0].tagName === 'BR'))) {
39
40
  nodeSelection.setSelectionText(docElement, range.startContainer.children[0], range.startContainer.children[0], 0, 0);
40
41
  range = nodeSelection.getRange(docElement);
41
42
  }
@@ -52,7 +53,7 @@ var InsertHtml = /** @class */ (function () {
52
53
  var closestParentNode = (node.nodeName.toLowerCase() === 'table') ? this.closestEle(nodes[0].parentNode, editNode) : nodes[0];
53
54
  if (isExternal || (!isNOU(node) && !isNOU(node.classList) &&
54
55
  node.classList.contains('pasteContent'))) {
55
- this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode);
56
+ this.pasteInsertHTML(nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode, enterAction);
56
57
  return;
57
58
  }
58
59
  if (editNode !== range.startContainer && ((!isCollapsed && !(closestParentNode.nodeType === Node.ELEMENT_NODE &&
@@ -166,7 +167,7 @@ var InsertHtml = /** @class */ (function () {
166
167
  }
167
168
  }
168
169
  };
169
- InsertHtml.pasteInsertHTML = function (nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode) {
170
+ InsertHtml.pasteInsertHTML = function (nodes, node, range, nodeSelection, nodeCutter, docElement, isCollapsed, closestParentNode, editNode, enterAction) {
170
171
  var isCursor = range.startOffset === range.endOffset &&
171
172
  range.startContainer === range.endContainer;
172
173
  if (isCursor && range.startContainer === editNode && editNode.textContent === '') {
@@ -220,7 +221,9 @@ var InsertHtml = /** @class */ (function () {
220
221
  }
221
222
  else {
222
223
  range.deleteContents();
223
- detach(lasNode);
224
+ if (!isNOU(lasNode)) {
225
+ detach(lasNode);
226
+ }
224
227
  // eslint-disable-next-line
225
228
  !isNOU(sibNode) ? sibNode.parentNode.appendChild(fragment) : editNode.appendChild(fragment);
226
229
  }
@@ -276,7 +279,12 @@ var InsertHtml = /** @class */ (function () {
276
279
  var firstParaElm = createElement('p');
277
280
  node.parentElement.insertBefore(firstParaElm, node);
278
281
  }
279
- node.previousElementSibling.appendChild(node.firstChild);
282
+ if (node.previousElementSibling.nodeName === 'BR') {
283
+ node.parentElement.insertBefore(node.firstChild, node);
284
+ }
285
+ else {
286
+ node.previousElementSibling.appendChild(node.firstChild);
287
+ }
280
288
  }
281
289
  else {
282
290
  lastSelectionNode = node.firstChild;
@@ -308,7 +316,7 @@ var InsertHtml = /** @class */ (function () {
308
316
  this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);
309
317
  }
310
318
  else {
311
- this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode);
319
+ this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction);
312
320
  }
313
321
  };
314
322
  InsertHtml.placeCursorEnd = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {
@@ -401,7 +409,7 @@ var InsertHtml = /** @class */ (function () {
401
409
  detach(currentNode.nextSibling);
402
410
  }
403
411
  }
404
- else if ((currentNode.nodeName === '#text' || currentNode.nodeName === "BR") && !isNOU(currentNode.parentElement) &&
412
+ else if ((currentNode.nodeName === '#text' || currentNode.nodeName === 'BR') && !isNOU(currentNode.parentElement) &&
405
413
  (currentNode.parentElement.nodeName === 'LI' || (blockNode === editNode && currentNode.parentElement === blockNode)) &&
406
414
  currentNode.parentElement.textContent.trim().length > 0) {
407
415
  splitedElm = currentNode;
@@ -423,9 +431,9 @@ var InsertHtml = /** @class */ (function () {
423
431
  }
424
432
  }
425
433
  };
426
- InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode) {
434
+ InsertHtml.cursorPos = function (lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction) {
427
435
  lastSelectionNode.classList.add('lastNode');
428
- editNode.innerHTML = updateTextNode(editNode.innerHTML);
436
+ editNode.innerHTML = updateTextNode(editNode.innerHTML, enterAction);
429
437
  lastSelectionNode = editNode.querySelector('.lastNode');
430
438
  if (!isNOU(lastSelectionNode)) {
431
439
  this.placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode);
@@ -226,6 +226,7 @@ var IsFormatted = /** @class */ (function () {
226
226
  'code',
227
227
  'dfn',
228
228
  'em',
229
+ 'font',
229
230
  'i',
230
231
  'kbd',
231
232
  'label',
@@ -250,7 +250,6 @@ var LinkCommand = /** @class */ (function () {
250
250
  return arr.join(' ') + ' ';
251
251
  };
252
252
  LinkCommand.prototype.openLink = function (e) {
253
- // eslint-disable-next-line security/detect-non-literal-fs-filename
254
253
  document.defaultView.open(e.item.url, e.item.target);
255
254
  this.callBack(e);
256
255
  };
@@ -127,7 +127,7 @@ var Lists = /** @class */ (function () {
127
127
  this.parent.domNode.insertAfter(insertTag, startNodeParent);
128
128
  e.event.preventDefault();
129
129
  this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, insertTag, 0);
130
- if (startNodeParent.textContent === '') {
130
+ if (startNodeParent.textContent === '' && (startNodeParent.querySelectorAll('audio,video').length === 0)) {
131
131
  detach(startNodeParent);
132
132
  }
133
133
  else {