@syncfusion/ej2-richtexteditor 21.2.10 → 22.1.34
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.
- package/.eslintrc.json +1 -0
- package/CHANGELOG.md +18 -0
- package/dist/ej2-richtexteditor.min.js +2 -2
- package/dist/ej2-richtexteditor.umd.min.js +2 -2
- package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es2015.js +1558 -186
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +1571 -189
- package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
- package/dist/global/ej2-richtexteditor.min.js +2 -2
- package/dist/global/ej2-richtexteditor.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +12 -12
- package/src/common/config.js +2 -2
- package/src/common/constant.d.ts +6 -0
- package/src/common/constant.js +6 -0
- package/src/common/interface.d.ts +2 -2
- package/src/common/util.js +2 -0
- package/src/editor-manager/base/editor-manager.d.ts +4 -3
- package/src/editor-manager/base/editor-manager.js +6 -1
- package/src/editor-manager/base/interface.d.ts +44 -9
- package/src/editor-manager/plugin/clearformat.d.ts +1 -0
- package/src/editor-manager/plugin/clearformat.js +1 -0
- package/src/editor-manager/plugin/dom-node.js +10 -6
- package/src/editor-manager/plugin/emoji-picker-action.d.ts +8 -0
- package/src/editor-manager/plugin/emoji-picker-action.js +62 -0
- package/src/editor-manager/plugin/format-painter-actions.d.ts +19 -36
- package/src/editor-manager/plugin/format-painter-actions.js +224 -81
- package/src/editor-manager/plugin/inserthtml.js +6 -1
- package/src/editor-manager/plugin/link.js +1 -1
- package/src/editor-manager/plugin/ms-word-clean-up.d.ts +3 -0
- package/src/editor-manager/plugin/ms-word-clean-up.js +40 -7
- package/src/editor-manager/plugin/selection-commands.d.ts +2 -1
- package/src/editor-manager/plugin/selection-commands.js +48 -23
- package/src/editor-manager/plugin/table.js +2 -2
- package/src/editor-manager/plugin/toolbar-status.js +6 -0
- package/src/editor-manager/plugin/undo.d.ts +1 -0
- package/src/editor-manager/plugin/undo.js +26 -5
- package/src/editor-manager/plugin.d.ts +1 -0
- package/src/editor-manager/plugin.js +1 -0
- package/src/global.js +1 -1
- package/src/rich-text-editor/actions/base-quick-toolbar.js +8 -1
- package/src/rich-text-editor/actions/base-toolbar.js +3 -2
- package/src/rich-text-editor/actions/emoji-picker.d.ts +48 -0
- package/src/rich-text-editor/actions/emoji-picker.js +778 -0
- package/src/rich-text-editor/actions/enter-key.js +2 -2
- package/src/rich-text-editor/actions/execute-command-callback.js +3 -1
- package/src/rich-text-editor/actions/file-manager.js +1 -0
- package/src/rich-text-editor/actions/format-painter.d.ts +2 -2
- package/src/rich-text-editor/actions/format-painter.js +11 -9
- package/src/rich-text-editor/actions/full-screen.js +6 -0
- package/src/rich-text-editor/actions/html-editor.js +11 -2
- package/src/rich-text-editor/actions/paste-clean-up.js +1 -0
- package/src/rich-text-editor/actions/resize.js +1 -1
- package/src/rich-text-editor/actions.d.ts +1 -0
- package/src/rich-text-editor/actions.js +1 -0
- package/src/rich-text-editor/base/constant.d.ts +10 -0
- package/src/rich-text-editor/base/constant.js +10 -0
- package/src/rich-text-editor/base/enum.d.ts +0 -4
- package/src/rich-text-editor/base/interface.d.ts +44 -6
- package/src/rich-text-editor/base/rich-text-editor-model.d.ts +13 -7
- package/src/rich-text-editor/base/rich-text-editor.d.ts +27 -7
- package/src/rich-text-editor/base/rich-text-editor.js +42 -12
- package/src/rich-text-editor/base/util.js +2 -2
- package/src/rich-text-editor/formatter/formatter.js +7 -5
- package/src/rich-text-editor/models/default-locale.js +14 -2
- package/src/rich-text-editor/models/items.d.ts +2 -1
- package/src/rich-text-editor/models/items.js +188 -1
- package/src/rich-text-editor/models/toolbar-settings-model.d.ts +212 -9
- package/src/rich-text-editor/models/toolbar-settings.d.ts +209 -11
- package/src/rich-text-editor/models/toolbar-settings.js +23 -6
- package/src/rich-text-editor/renderer/audio-module.js +3 -3
- package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
- package/src/rich-text-editor/renderer/image-module.js +11 -6
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +2 -0
- package/src/rich-text-editor/renderer/toolbar-renderer.js +7 -2
- package/src/rich-text-editor/renderer/video-module.js +14 -9
- package/styles/bootstrap-dark.css +299 -137
- package/styles/bootstrap.css +305 -140
- package/styles/bootstrap4.css +304 -133
- package/styles/bootstrap5-dark.css +310 -165
- package/styles/bootstrap5.css +310 -165
- package/styles/fabric-dark.css +297 -136
- package/styles/fabric.css +294 -133
- package/styles/fluent-dark.css +311 -170
- package/styles/fluent.css +311 -170
- package/styles/highcontrast-light.css +289 -128
- package/styles/highcontrast.css +296 -135
- package/styles/material-dark.css +295 -129
- package/styles/material.css +300 -134
- package/styles/material3-dark.css +3082 -0
- package/styles/material3-dark.scss +3 -0
- package/styles/material3.css +3138 -0
- package/styles/material3.scss +3 -0
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +54 -12
- package/styles/rich-text-editor/_bootstrap-definition.scss +57 -13
- package/styles/rich-text-editor/_bootstrap4-definition.scss +50 -7
- package/styles/rich-text-editor/_bootstrap5-definition.scss +56 -13
- package/styles/rich-text-editor/_fabric-dark-definition.scss +53 -10
- package/styles/rich-text-editor/_fabric-definition.scss +52 -9
- package/styles/rich-text-editor/_fluent-definition.scss +56 -15
- package/styles/rich-text-editor/_fusionnew-definition.scss +46 -4
- package/styles/rich-text-editor/_highcontrast-definition.scss +52 -9
- package/styles/rich-text-editor/_highcontrast-light-definition.scss +48 -5
- package/styles/rich-text-editor/_layout.scss +280 -68
- package/styles/rich-text-editor/_material-dark-definition.scss +48 -5
- package/styles/rich-text-editor/_material-definition.scss +50 -6
- package/styles/rich-text-editor/_material3-dark-definition.scss +1 -0
- package/styles/rich-text-editor/_material3-definition.scss +262 -0
- package/styles/rich-text-editor/_tailwind-definition.scss +63 -23
- package/styles/rich-text-editor/_theme.scss +103 -19
- package/styles/rich-text-editor/bootstrap-dark.css +299 -137
- package/styles/rich-text-editor/bootstrap.css +305 -140
- package/styles/rich-text-editor/bootstrap4.css +304 -133
- package/styles/rich-text-editor/bootstrap5-dark.css +310 -165
- package/styles/rich-text-editor/bootstrap5.css +310 -165
- package/styles/rich-text-editor/fabric-dark.css +297 -136
- package/styles/rich-text-editor/fabric.css +294 -133
- package/styles/rich-text-editor/fluent-dark.css +311 -170
- package/styles/rich-text-editor/fluent.css +311 -170
- package/styles/rich-text-editor/highcontrast-light.css +289 -128
- package/styles/rich-text-editor/highcontrast.css +296 -135
- package/styles/rich-text-editor/icons/_bootstrap-dark.scss +1 -1
- package/styles/rich-text-editor/icons/_bootstrap.scss +1 -1
- package/styles/rich-text-editor/icons/_bootstrap4.scss +1 -1
- package/styles/rich-text-editor/icons/_bootstrap5.scss +1 -1
- package/styles/rich-text-editor/icons/_fabric-dark.scss +1 -1
- package/styles/rich-text-editor/icons/_fabric.scss +1 -1
- package/styles/rich-text-editor/icons/_fluent.scss +1 -1
- package/styles/rich-text-editor/icons/_fusionnew.scss +1 -1
- package/styles/rich-text-editor/icons/_highcontrast-light.scss +1 -1
- package/styles/rich-text-editor/icons/_highcontrast.scss +1 -1
- package/styles/rich-text-editor/icons/_material-dark.scss +1 -1
- package/styles/rich-text-editor/icons/_material.scss +1 -1
- package/styles/rich-text-editor/icons/_material3-dark.scss +1 -0
- package/styles/rich-text-editor/icons/_material3.scss +1 -1
- package/styles/rich-text-editor/icons/_tailwind.scss +1 -1
- package/styles/rich-text-editor/material-dark.css +295 -129
- package/styles/rich-text-editor/material.css +300 -134
- package/styles/rich-text-editor/material3-dark.css +3082 -0
- package/styles/rich-text-editor/material3-dark.scss +5 -0
- package/styles/rich-text-editor/material3.css +3138 -0
- package/styles/rich-text-editor/material3.scss +5 -0
- package/styles/rich-text-editor/tailwind-dark.css +313 -157
- package/styles/rich-text-editor/tailwind.css +313 -157
- package/styles/tailwind-dark.css +313 -157
- package/styles/tailwind.css +313 -157
|
@@ -3,6 +3,7 @@ import * as EVENTS from '../../common/constant';
|
|
|
3
3
|
import { SelectionCommands } from '../plugin';
|
|
4
4
|
var FormatPainterActions = /** @class */ (function () {
|
|
5
5
|
function FormatPainterActions(parent, options) {
|
|
6
|
+
this.INVALID_TAGS = ['A', 'AUDIO', 'IMG', 'VIDEO', 'IFRAME'];
|
|
6
7
|
this.parent = parent;
|
|
7
8
|
this.settings = options;
|
|
8
9
|
this.addEventListener();
|
|
@@ -10,8 +11,43 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
10
11
|
}
|
|
11
12
|
FormatPainterActions.prototype.addEventListener = function () {
|
|
12
13
|
this.parent.observer.on(EVENTS.FORMAT_PAINTER_ACTIONS, this.actionHandler, this);
|
|
14
|
+
this.parent.observer.on(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged, this);
|
|
15
|
+
};
|
|
16
|
+
FormatPainterActions.prototype.onPropertyChanged = function (prop) {
|
|
17
|
+
if (prop && prop.module === 'formatPainter') {
|
|
18
|
+
if (!isNOU(prop.newProp.formatPainterSettings.allowedFormats)) {
|
|
19
|
+
this.settings.allowedFormats = prop.newProp.formatPainterSettings.allowedFormats;
|
|
20
|
+
}
|
|
21
|
+
if (!isNOU(prop.newProp.formatPainterSettings.deniedFormats)) {
|
|
22
|
+
this.settings.deniedFormats = prop.newProp.formatPainterSettings.deniedFormats;
|
|
23
|
+
this.setDeniedFormats();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
FormatPainterActions.prototype.removeEventListener = function () {
|
|
28
|
+
this.parent.observer.off(EVENTS.FORMAT_PAINTER_ACTIONS, this.actionHandler);
|
|
29
|
+
this.parent.observer.off(EVENTS.MODEL_CHANGED_PLUGIN, this.onPropertyChanged);
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Destroys the format painter.
|
|
33
|
+
*
|
|
34
|
+
* @function destroy
|
|
35
|
+
* @returns {void}
|
|
36
|
+
* @hidden
|
|
37
|
+
|
|
38
|
+
*/
|
|
39
|
+
FormatPainterActions.prototype.destroy = function () {
|
|
40
|
+
this.removeEventListener();
|
|
41
|
+
this.INVALID_TAGS = null;
|
|
42
|
+
this.copyCollection = null;
|
|
43
|
+
this.deniedFormatsCollection = null;
|
|
44
|
+
this.newElem = null;
|
|
45
|
+
this.newElemLastChild = null;
|
|
46
|
+
this.settings = null;
|
|
47
|
+
this.parent = null;
|
|
13
48
|
};
|
|
14
49
|
FormatPainterActions.prototype.actionHandler = function (args) {
|
|
50
|
+
this.settings.allowedContext = ['Text', 'List', 'Table'];
|
|
15
51
|
if (!isNOU(args) && !isNOU(args.item) && !isNOU(args.item.formatPainterAction)) {
|
|
16
52
|
switch (args.item.formatPainterAction) {
|
|
17
53
|
case 'format-copy':
|
|
@@ -24,6 +60,19 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
24
60
|
this.escapeAction();
|
|
25
61
|
break;
|
|
26
62
|
}
|
|
63
|
+
this.callBack(args);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
FormatPainterActions.prototype.callBack = function (event) {
|
|
67
|
+
if (event.callBack) {
|
|
68
|
+
event.callBack({
|
|
69
|
+
requestType: 'FormatPainter',
|
|
70
|
+
action: event.item.formatPainterAction,
|
|
71
|
+
event: event.event,
|
|
72
|
+
editorMode: 'HTML',
|
|
73
|
+
range: this.parent.nodeSelection.getRange(this.parent.currentDocument),
|
|
74
|
+
elements: this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)
|
|
75
|
+
});
|
|
27
76
|
}
|
|
28
77
|
};
|
|
29
78
|
FormatPainterActions.prototype.generateElement = function () {
|
|
@@ -78,7 +127,6 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
78
127
|
return;
|
|
79
128
|
}
|
|
80
129
|
this.insertFormatNode(this.newElem, this.newElemLastChild);
|
|
81
|
-
this.parent.undoRedoManager.saveData();
|
|
82
130
|
};
|
|
83
131
|
FormatPainterActions.prototype.removeDeniedFormats = function (parentElement) {
|
|
84
132
|
if (!isNOU(this.deniedFormatsCollection) && this.deniedFormatsCollection.length > 0) {
|
|
@@ -127,13 +175,23 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
127
175
|
FormatPainterActions.prototype.copyAction = function () {
|
|
128
176
|
var copyCollection = [];
|
|
129
177
|
var range = this.parent.nodeSelection.getRange(document);
|
|
130
|
-
var
|
|
178
|
+
var domSelection = this.parent.nodeSelection;
|
|
179
|
+
var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :
|
|
180
|
+
domSelection.getSelectionNodeCollectionBr(range);
|
|
181
|
+
if (nodes.length === 0 && domSelection.getSelectionNodeCollectionBr(range).length === 0) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
nodes = nodes.length === 0 ? domSelection.getSelectionNodeCollectionBr(range) : nodes;
|
|
186
|
+
}
|
|
187
|
+
var parentElem = nodes[0].parentElement;
|
|
131
188
|
var currentContext = this.findCurrentContext(parentElem);
|
|
132
|
-
var allowedRulesArray = this.settings.allowedFormats.split(';')
|
|
189
|
+
var allowedRulesArray = this.settings.allowedFormats.indexOf(';') > -1 ? this.settings.allowedFormats.split(';') :
|
|
190
|
+
[this.settings.allowedFormats];
|
|
133
191
|
for (var i = 0; i < allowedRulesArray.length; i++) {
|
|
134
192
|
allowedRulesArray[i] = allowedRulesArray[i].trim();
|
|
135
193
|
}
|
|
136
|
-
var _a = this.getRangeParentElem(currentContext,
|
|
194
|
+
var _a = this.getRangeParentElem(currentContext, parentElem), rangeParentElem = _a[0], context = _a[1];
|
|
137
195
|
if (currentContext === null) {
|
|
138
196
|
currentContext = context;
|
|
139
197
|
}
|
|
@@ -178,8 +236,8 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
178
236
|
}
|
|
179
237
|
this.generateElement();
|
|
180
238
|
};
|
|
181
|
-
FormatPainterActions.prototype.getRangeParentElem = function (currentContext,
|
|
182
|
-
var startContainer =
|
|
239
|
+
FormatPainterActions.prototype.getRangeParentElem = function (currentContext, rangeParent) {
|
|
240
|
+
var startContainer = rangeParent;
|
|
183
241
|
var rangeParentELem;
|
|
184
242
|
if (startContainer.nodeType === 3) {
|
|
185
243
|
startContainer = startContainer.parentElement;
|
|
@@ -199,7 +257,7 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
199
257
|
break;
|
|
200
258
|
}
|
|
201
259
|
if (isNOU(rangeParentELem)) {
|
|
202
|
-
var nearBlockParentName = this.getNearestBlockParentElement(
|
|
260
|
+
var nearBlockParentName = this.getNearestBlockParentElement(rangeParent);
|
|
203
261
|
if (!isNOU(nearBlockParentName) && nearBlockParentName !== 'UL' &&
|
|
204
262
|
nearBlockParentName !== 'OL' && nearBlockParentName !== 'LI') {
|
|
205
263
|
rangeParentELem = closest(startContainer, nearBlockParentName);
|
|
@@ -211,8 +269,8 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
211
269
|
}
|
|
212
270
|
return [rangeParentELem, currentContext];
|
|
213
271
|
};
|
|
214
|
-
FormatPainterActions.prototype.getNearestBlockParentElement = function (
|
|
215
|
-
var node =
|
|
272
|
+
FormatPainterActions.prototype.getNearestBlockParentElement = function (rangeParent) {
|
|
273
|
+
var node = rangeParent;
|
|
216
274
|
if (node.nodeType === 3) {
|
|
217
275
|
node = node.parentNode;
|
|
218
276
|
}
|
|
@@ -255,29 +313,32 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
255
313
|
}
|
|
256
314
|
};
|
|
257
315
|
FormatPainterActions.prototype.validateELementTag = function (node) {
|
|
258
|
-
var INVALID_TAGS = ['A', 'AUDIO', 'IMG', 'VIDEO', 'IFRAME'];
|
|
259
316
|
if (node.nodeType === 3) {
|
|
260
317
|
node = node.parentElement;
|
|
261
318
|
}
|
|
262
|
-
return INVALID_TAGS.indexOf(node.tagName) > -1;
|
|
319
|
+
return this.INVALID_TAGS.indexOf(node.tagName) > -1;
|
|
263
320
|
};
|
|
264
321
|
FormatPainterActions.prototype.findCurrentContext = function (parentElem) {
|
|
265
|
-
if (closest(parentElem, '
|
|
266
|
-
return '
|
|
322
|
+
if (closest(parentElem, 'p')) {
|
|
323
|
+
return 'Text';
|
|
267
324
|
}
|
|
268
325
|
else if (closest(parentElem, 'li')) {
|
|
269
326
|
return 'List';
|
|
270
327
|
}
|
|
271
|
-
else if (closest(parentElem, '
|
|
272
|
-
return '
|
|
328
|
+
else if (closest(parentElem, 'td') || closest(parentElem, 'tr') || closest(parentElem, 'th')) {
|
|
329
|
+
return 'Table';
|
|
273
330
|
}
|
|
274
331
|
return null;
|
|
275
332
|
};
|
|
276
333
|
FormatPainterActions.prototype.insertFormatNode = function (elem, lastChild) {
|
|
334
|
+
var clonedElem = elem.cloneNode(true);
|
|
335
|
+
if (!this.isBlockElement(elem)) {
|
|
336
|
+
var newBlockElem = createElement('P');
|
|
337
|
+
newBlockElem.appendChild(elem);
|
|
338
|
+
clonedElem = newBlockElem.cloneNode(true);
|
|
339
|
+
}
|
|
277
340
|
var endNode = this.parent.editableElement;
|
|
278
341
|
var docElement = this.parent.currentDocument;
|
|
279
|
-
var domSelection = this.parent.nodeSelection;
|
|
280
|
-
var clonedElem = elem.cloneNode(true);
|
|
281
342
|
var childElem = clonedElem.firstChild;
|
|
282
343
|
var inlineElement;
|
|
283
344
|
while (childElem) {
|
|
@@ -294,107 +355,183 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
294
355
|
lastChild: lastChild
|
|
295
356
|
};
|
|
296
357
|
SelectionCommands.applyFormat(docElement, null, endNode, 'P', 'formatPainter', null, formatValues);
|
|
297
|
-
var isFullNodeSelected;
|
|
298
358
|
var range = this.parent.nodeSelection.getRange(docElement);
|
|
299
359
|
var isCollapsed = range.collapsed;
|
|
300
|
-
var
|
|
301
|
-
|
|
302
|
-
if (
|
|
303
|
-
|
|
304
|
-
nodes[0] = nodes[0].parentElement;
|
|
305
|
-
}
|
|
306
|
-
isFullNodeSelected = nodes[0].textContent.trim() === range.commonAncestorContainer.wholeText.trim();
|
|
360
|
+
var blockNodes = this.parent.domNode.blockNodes();
|
|
361
|
+
var isFullNodeSelected = false;
|
|
362
|
+
if (blockNodes.length === 1) {
|
|
363
|
+
isFullNodeSelected = blockNodes[0].textContent.trim() === range.toString().trim();
|
|
307
364
|
}
|
|
308
|
-
if (this.isBlockElement(
|
|
309
|
-
this.insertBlockNode(
|
|
365
|
+
if (this.isBlockElement(clonedElem) && isCollapsed || blockNodes.length > 1 || isFullNodeSelected) {
|
|
366
|
+
this.insertBlockNode(clonedElem, range, docElement, blockNodes);
|
|
310
367
|
}
|
|
311
368
|
};
|
|
312
|
-
FormatPainterActions.prototype.insertBlockNode = function (element, range, docElement,
|
|
369
|
+
FormatPainterActions.prototype.insertBlockNode = function (element, range, docElement, nodes) {
|
|
313
370
|
var domSelection = this.parent.nodeSelection;
|
|
371
|
+
var saveSelection = domSelection.save(range, docElement);
|
|
372
|
+
this.parent.domNode.setMarker(saveSelection);
|
|
314
373
|
var listElement; // To clone to multiple list elements
|
|
315
374
|
var cloneListParentNode;
|
|
375
|
+
var sameListType = false;
|
|
316
376
|
if (element.nodeName === 'UL' || element.nodeName === 'OL') {
|
|
317
377
|
cloneListParentNode = element.cloneNode(true);
|
|
318
378
|
listElement = cloneListParentNode.firstChild;
|
|
319
379
|
}
|
|
320
|
-
var
|
|
380
|
+
var cloneElementNode = isNOU(cloneListParentNode) ? element : element.firstChild;
|
|
321
381
|
for (var index = 0; index < nodes.length; index++) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
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);
|
|
382
|
+
if (this.INVALID_TAGS.indexOf(nodes[index].nodeName) > -1 ||
|
|
383
|
+
nodes[index].querySelectorAll('a,img,audio,video,iframe').length > 0) {
|
|
384
|
+
continue;
|
|
335
385
|
}
|
|
386
|
+
var cloneParentNode = cloneElementNode.cloneNode(false);
|
|
336
387
|
// Appending all the child elements
|
|
337
388
|
while (nodes[index].firstChild) {
|
|
338
|
-
if (
|
|
389
|
+
if (nodes[index].textContent.trim().length !== 0) {
|
|
339
390
|
cloneParentNode.appendChild(nodes[index].firstChild);
|
|
340
391
|
}
|
|
341
392
|
else {
|
|
342
|
-
|
|
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]);
|
|
393
|
+
nodes[index].removeChild(nodes[index].firstChild);
|
|
351
394
|
}
|
|
352
395
|
}
|
|
353
|
-
if (
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
else {
|
|
367
|
-
parent_1.parentElement.insertBefore(cloneListParentNode, parent_1);
|
|
368
|
-
}
|
|
396
|
+
if (nodes[index].nodeName === 'TD' || nodes[index].nodeName === 'TH') {
|
|
397
|
+
if (isNOU(cloneListParentNode)) {
|
|
398
|
+
nodes[index].appendChild(cloneParentNode);
|
|
399
|
+
continue;
|
|
400
|
+
}
|
|
401
|
+
else if (index === 0 && !isNOU(cloneListParentNode)) {
|
|
402
|
+
nodes[index].appendChild(cloneListParentNode);
|
|
403
|
+
cloneListParentNode.appendChild(cloneParentNode);
|
|
404
|
+
continue;
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
nodes[index].appendChild(cloneParentNode);
|
|
408
|
+
continue;
|
|
369
409
|
}
|
|
370
|
-
|
|
410
|
+
}
|
|
411
|
+
if (!isNOU(cloneListParentNode)) {
|
|
412
|
+
sameListType = this.isSameListType(element, nodes[index]);
|
|
413
|
+
}
|
|
414
|
+
if (cloneParentNode.nodeName === 'LI' && !sameListType) {
|
|
415
|
+
this.insertNewList(range, nodes, index, cloneListParentNode, cloneParentNode);
|
|
416
|
+
}
|
|
417
|
+
else if (sameListType) {
|
|
418
|
+
this.insertSameList(nodes, index, cloneListParentNode, cloneParentNode);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
nodes[index].parentNode.replaceChild(cloneParentNode, nodes[index]);
|
|
371
422
|
}
|
|
372
423
|
/**Removing the inserted block node in list and appending to previous element sibling */
|
|
373
424
|
if (cloneParentNode.nodeName !== 'LI' && (cloneParentNode.parentElement.nodeName === 'OL' ||
|
|
374
425
|
cloneParentNode.parentElement.nodeName === 'UL')) {
|
|
375
|
-
var
|
|
426
|
+
var parent_1 = cloneParentNode.parentElement;
|
|
376
427
|
// Cutting single ul or ol to two ul or ol based on the range
|
|
377
|
-
this.parent.nodeCutter.SplitNode(range,
|
|
378
|
-
if (!isNOU(
|
|
379
|
-
|
|
428
|
+
this.parent.nodeCutter.SplitNode(range, parent_1, true);
|
|
429
|
+
if (!isNOU(parent_1.previousElementSibling)) {
|
|
430
|
+
parent_1.previousElementSibling.after(cloneParentNode);
|
|
431
|
+
// To remove the nested list items out of the block element
|
|
432
|
+
if (cloneParentNode.childNodes.length > 1) {
|
|
433
|
+
for (var j = 0; j < cloneParentNode.childNodes.length; j++) {
|
|
434
|
+
var currentChild = cloneParentNode.childNodes[j];
|
|
435
|
+
if (currentChild.nodeName === 'OL' || currentChild.nodeName === 'UL') {
|
|
436
|
+
cloneParentNode.after(currentChild);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
380
440
|
}
|
|
381
441
|
else {
|
|
382
|
-
|
|
442
|
+
parent_1.parentElement.prepend(cloneParentNode);
|
|
383
443
|
}
|
|
384
444
|
}
|
|
385
|
-
nodes[index] = lastTextNode;
|
|
386
445
|
}
|
|
387
446
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
388
447
|
!isNOU(listElement) ? detach(listElement) : false;
|
|
389
448
|
this.cleanEmptyLists();
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
449
|
+
var save = this.parent.domNode.saveMarker(saveSelection, null);
|
|
450
|
+
save.restore();
|
|
451
|
+
};
|
|
452
|
+
FormatPainterActions.prototype.insertNewList = function (range, nodes, index, cloneListParentNode, cloneParentNode) {
|
|
453
|
+
// Appending the li nodes to the ol or ul node
|
|
454
|
+
if (index === 0) {
|
|
455
|
+
var nodeName = nodes[index].nodeName;
|
|
456
|
+
nodes[index] = nodes[index].parentNode.replaceChild(cloneListParentNode, nodes[index]);
|
|
457
|
+
var parent_2 = nodeName === 'LI' ? cloneListParentNode.parentElement
|
|
458
|
+
: cloneListParentNode;
|
|
459
|
+
// Splicing and then inserting the node to previous element sibling of the Listparent.parent
|
|
460
|
+
this.parent.nodeCutter.SplitNode(range, parent_2, true);
|
|
461
|
+
if (nodes[index].nodeName === 'LI' && !isNOU(parent_2)) {
|
|
462
|
+
cloneListParentNode.append(cloneParentNode);
|
|
463
|
+
if (!isNOU(parent_2.parentNode)) {
|
|
464
|
+
parent_2.parentNode.insertBefore(cloneListParentNode, parent_2);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
if (!isNOU(parent_2)) {
|
|
469
|
+
if (!isNOU(parent_2.previousElementSibling) && parent_2.previousElementSibling.nodeName === cloneListParentNode.nodeName) {
|
|
470
|
+
var currentParent = parent_2.previousElementSibling;
|
|
471
|
+
currentParent.append(cloneParentNode);
|
|
472
|
+
while (currentParent.firstChild) {
|
|
473
|
+
cloneListParentNode.append(currentParent.firstChild);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
else if (!isNOU(parent_2.nextElementSibling) && parent_2.nextElementSibling.nodeName === cloneListParentNode.nodeName) {
|
|
477
|
+
var currentParent = parent_2.nextElementSibling;
|
|
478
|
+
currentParent.prepend(cloneParentNode);
|
|
479
|
+
while (currentParent.firstChild) {
|
|
480
|
+
cloneListParentNode.append(currentParent.firstChild);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
else {
|
|
484
|
+
cloneListParentNode.append(cloneParentNode);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
cloneListParentNode.append(cloneParentNode);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
else {
|
|
493
|
+
cloneListParentNode.append(cloneParentNode);
|
|
494
|
+
}
|
|
495
|
+
this.detachEmptyBlockNodes(nodes[index]);
|
|
496
|
+
};
|
|
497
|
+
FormatPainterActions.prototype.insertSameList = function (nodes, index, cloneListParentNode, cloneParentNode) {
|
|
498
|
+
if (index === 0) {
|
|
499
|
+
if (!isNOU(nodes[index].parentNode) && (nodes[index].parentNode.nodeName === 'UL' || nodes[index].parentNode.nodeName === 'OL')) {
|
|
500
|
+
// append the nodes[index].parentNode.childNodes to the clonelistparentnode
|
|
501
|
+
if (nodes.length === 1) {
|
|
502
|
+
// When clicked with cursor in the single list item
|
|
503
|
+
while (cloneParentNode.firstChild) {
|
|
504
|
+
nodes[index].append(cloneParentNode.firstChild);
|
|
505
|
+
}
|
|
506
|
+
for (var i = 0; i < nodes[index].parentNode.childNodes.length; i++) {
|
|
507
|
+
var currentChild = nodes[index].parentNode.childNodes[i];
|
|
508
|
+
cloneListParentNode.append(currentChild.cloneNode(true));
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
else {
|
|
512
|
+
cloneListParentNode.append(cloneParentNode);
|
|
513
|
+
}
|
|
514
|
+
// replace the older ol and ul with new ol and ul of clonelistparentnode
|
|
515
|
+
nodes[index].parentNode.parentNode.replaceChild(cloneListParentNode, nodes[index].parentNode);
|
|
516
|
+
}
|
|
394
517
|
}
|
|
395
518
|
else {
|
|
396
|
-
|
|
519
|
+
cloneListParentNode.append(cloneParentNode);
|
|
520
|
+
}
|
|
521
|
+
this.detachEmptyBlockNodes(nodes[index]);
|
|
522
|
+
};
|
|
523
|
+
FormatPainterActions.prototype.isSameListType = function (element, node) {
|
|
524
|
+
var isSameListType = false;
|
|
525
|
+
var nearestListNode = closest(node, 'ol, ul');
|
|
526
|
+
if (!isNOU(nearestListNode) && nearestListNode.querySelectorAll('li').length > 0) {
|
|
527
|
+
if (nearestListNode.nodeName === element.nodeName) {
|
|
528
|
+
isSameListType = true;
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
isSameListType = false;
|
|
532
|
+
}
|
|
397
533
|
}
|
|
534
|
+
return isSameListType;
|
|
398
535
|
};
|
|
399
536
|
FormatPainterActions.prototype.cleanEmptyLists = function () {
|
|
400
537
|
var listElem = this.parent.editableElement.querySelectorAll('ol, ul');
|
|
@@ -409,7 +546,8 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
409
546
|
if (isNOU(this.settings) || isNOU(this.settings.deniedFormats)) {
|
|
410
547
|
return;
|
|
411
548
|
}
|
|
412
|
-
var deniedFormats = this.settings.deniedFormats.split(';')
|
|
549
|
+
var deniedFormats = this.settings.deniedFormats.indexOf(';') > -1 ? this.settings.deniedFormats.split(';') :
|
|
550
|
+
[this.settings.deniedFormats];
|
|
413
551
|
var length = deniedFormats.length;
|
|
414
552
|
for (var i = 0; i < length; i++) {
|
|
415
553
|
var formatString = deniedFormats[i];
|
|
@@ -423,6 +561,11 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
423
561
|
}
|
|
424
562
|
this.deniedFormatsCollection = deniedFormatsCollection;
|
|
425
563
|
};
|
|
564
|
+
FormatPainterActions.prototype.detachEmptyBlockNodes = function (node) {
|
|
565
|
+
if (!isNOU(node) && node.textContent.trim() === '') {
|
|
566
|
+
detach(node);
|
|
567
|
+
}
|
|
568
|
+
};
|
|
426
569
|
FormatPainterActions.prototype.makeDeniedFormatsCollection = function (value) {
|
|
427
570
|
var openParenIndex = value.indexOf('(');
|
|
428
571
|
var closeParenIndex = value.indexOf(')');
|
|
@@ -478,7 +478,12 @@ var InsertHtml = /** @class */ (function () {
|
|
|
478
478
|
InsertHtml.removeEmptyElements = function (element) {
|
|
479
479
|
var emptyElements = element.querySelectorAll(':empty');
|
|
480
480
|
for (var i = 0; i < emptyElements.length; i++) {
|
|
481
|
-
|
|
481
|
+
var lineWithDiv = true;
|
|
482
|
+
if (emptyElements[i].tagName === 'DIV') {
|
|
483
|
+
lineWithDiv = emptyElements[i].style.borderBottom === 'none' ||
|
|
484
|
+
emptyElements[i].style.borderBottom === '' ? true : false;
|
|
485
|
+
}
|
|
486
|
+
if (CONSTANT.SELF_CLOSING_TAGS.indexOf(emptyElements[i].tagName.toLowerCase()) < 0 && lineWithDiv) {
|
|
482
487
|
var detachableElement = this.findDetachEmptyElem(emptyElements[i]);
|
|
483
488
|
if (!isNOU(detachableElement)) {
|
|
484
489
|
detach(detachableElement);
|
|
@@ -75,7 +75,7 @@ var LinkCommand = /** @class */ (function () {
|
|
|
75
75
|
var domSelection = new NodeSelection();
|
|
76
76
|
var range = domSelection.getRange(this.parent.currentDocument);
|
|
77
77
|
if (range.endContainer.nodeName === '#text' && range.startContainer.textContent.length === (range.endOffset + 1) &&
|
|
78
|
-
range.endContainer.textContent.charAt(range.endOffset) === ' ' && range.endContainer.nextSibling.nodeName === 'A') {
|
|
78
|
+
range.endContainer.textContent.charAt(range.endOffset) === ' ' && (!isNOU(range.endContainer.nextSibling) && range.endContainer.nextSibling.nodeName === 'A')) {
|
|
79
79
|
domSelection.setSelectionText(this.parent.currentDocument, range.startContainer, range.endContainer, range.startOffset, range.endOffset + 1);
|
|
80
80
|
range = domSelection.getRange(this.parent.currentDocument);
|
|
81
81
|
}
|
|
@@ -20,6 +20,9 @@ export declare class MsWordPaste {
|
|
|
20
20
|
private listContents;
|
|
21
21
|
private addEventListener;
|
|
22
22
|
private wordCleanup;
|
|
23
|
+
private cleanList;
|
|
24
|
+
private insertAfter;
|
|
25
|
+
private findClosestListElem;
|
|
23
26
|
private addListClass;
|
|
24
27
|
private addTableBorderClass;
|
|
25
28
|
private imageConversion;
|
|
@@ -73,6 +73,8 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
73
73
|
listNodes[0].parentElement.tagName !== 'OL') {
|
|
74
74
|
this.listConverter(listNodes);
|
|
75
75
|
}
|
|
76
|
+
this.cleanList(elm, 'UL');
|
|
77
|
+
this.cleanList(elm, 'OL');
|
|
76
78
|
this.styleCorrection(elm, wordPasteStyleConfig);
|
|
77
79
|
this.removingComments(elm);
|
|
78
80
|
this.removeUnwantedElements(elm);
|
|
@@ -98,11 +100,38 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
98
100
|
e.callBack(elm.innerHTML);
|
|
99
101
|
}
|
|
100
102
|
};
|
|
103
|
+
MsWordPaste.prototype.cleanList = function (elm, listTag) {
|
|
104
|
+
var replacableElem = elm.querySelectorAll(listTag + ' div');
|
|
105
|
+
for (var j = replacableElem.length - 1; j >= 0; j--) {
|
|
106
|
+
var parentElem = replacableElem[j].parentNode;
|
|
107
|
+
while (replacableElem[j].firstChild) {
|
|
108
|
+
parentElem.insertBefore(replacableElem[j].firstChild, replacableElem[j]);
|
|
109
|
+
}
|
|
110
|
+
var closestListElem = this.findClosestListElem(replacableElem[j]);
|
|
111
|
+
if (closestListElem) {
|
|
112
|
+
this.insertAfter(replacableElem[j], closestListElem);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
MsWordPaste.prototype.insertAfter = function (newNode, referenceNode) {
|
|
117
|
+
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
|
|
118
|
+
};
|
|
119
|
+
MsWordPaste.prototype.findClosestListElem = function (listElem) {
|
|
120
|
+
var closestListElem;
|
|
121
|
+
while (!isNOU(listElem)) {
|
|
122
|
+
listElem = !isNOU(listElem.closest('ul')) && listElem.tagName !== 'UL' ?
|
|
123
|
+
listElem.closest('ul') : (listElem.tagName !== 'OL' ? listElem.closest('ol') : null);
|
|
124
|
+
closestListElem = !isNOU(listElem) ? listElem : closestListElem;
|
|
125
|
+
}
|
|
126
|
+
return closestListElem;
|
|
127
|
+
};
|
|
101
128
|
MsWordPaste.prototype.addListClass = function (elm) {
|
|
102
129
|
var allNodes = elm.querySelectorAll('*');
|
|
103
130
|
for (var index = 0; index < allNodes.length; index++) {
|
|
104
131
|
if (!isNOU(allNodes[index].getAttribute('style')) && allNodes[index].getAttribute('style').replace(/ /g, '').replace('\n', '').indexOf('mso-list:l') >= 0 &&
|
|
105
|
-
allNodes[index].className.toLowerCase().indexOf('msolistparagraph') === -1 &&
|
|
132
|
+
allNodes[index].className.toLowerCase().indexOf('msolistparagraph') === -1 &&
|
|
133
|
+
allNodes[index].tagName.charAt(0) !== 'H' && allNodes[index].tagName !== 'LI' &&
|
|
134
|
+
allNodes[index].tagName !== 'OL' && allNodes[index].tagName !== 'UL') {
|
|
106
135
|
allNodes[index].classList.add('msolistparagraph');
|
|
107
136
|
}
|
|
108
137
|
}
|
|
@@ -226,7 +255,7 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
226
255
|
MsWordPaste.prototype.hexConversion = function (rtfData) {
|
|
227
256
|
// eslint-disable-next-line
|
|
228
257
|
var picHead = /\{\\pict[\s\S]+?\\bliptag\-?\d+(\\blipupi\-?\d+)?(\{\\\*\\blipuid\s?[\da-fA-F]+)?[\s\}]*?/;
|
|
229
|
-
// eslint-disable-next-line
|
|
258
|
+
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
230
259
|
var pic = new RegExp('(?:(' + picHead.source + '))([\\da-fA-F\\s]+)\\}', 'g');
|
|
231
260
|
var fullImg = rtfData.match(pic);
|
|
232
261
|
var imgType;
|
|
@@ -290,9 +319,9 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
290
319
|
MsWordPaste.prototype.removeUnwantedElements = function (elm) {
|
|
291
320
|
var innerElement = elm.innerHTML;
|
|
292
321
|
for (var i = 0; i < this.removableElements.length; i++) {
|
|
293
|
-
// eslint-disable-next-line
|
|
322
|
+
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
294
323
|
var regExpStartElem = new RegExp('<' + this.removableElements[i] + '>', 'g');
|
|
295
|
-
// eslint-disable-next-line
|
|
324
|
+
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
296
325
|
var regExpEndElem = new RegExp('</' + this.removableElements[i] + '>', 'g');
|
|
297
326
|
innerElement = innerElement.replace(regExpStartElem, '');
|
|
298
327
|
innerElement = innerElement.replace(regExpEndElem, '');
|
|
@@ -335,9 +364,14 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
335
364
|
!isNOU(emptyElements[i].closest('td').querySelector('.MsoNormal'))) {
|
|
336
365
|
emptyElements[i].innerHTML = '-';
|
|
337
366
|
}
|
|
367
|
+
var lineWithDiv = true;
|
|
368
|
+
if (emptyElements[i].tagName === 'DIV') {
|
|
369
|
+
lineWithDiv = emptyElements[i].style.borderBottom === 'none' ||
|
|
370
|
+
emptyElements[i].style.borderBottom === '' ? true : false;
|
|
371
|
+
}
|
|
338
372
|
if (emptyElements[i].tagName !== 'IMG' && emptyElements[i].tagName !== 'BR' &&
|
|
339
373
|
emptyElements[i].tagName !== 'IFRAME' && emptyElements[i].tagName !== 'TD' &&
|
|
340
|
-
emptyElements[i].tagName !== 'HR') {
|
|
374
|
+
emptyElements[i].tagName !== 'HR' && lineWithDiv) {
|
|
341
375
|
var detachableElement = this.findDetachEmptyElem(emptyElements[i]);
|
|
342
376
|
if (!isNOU(detachableElement)) {
|
|
343
377
|
detach(detachableElement);
|
|
@@ -466,7 +500,6 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
466
500
|
elm.innerHTML = innerElement;
|
|
467
501
|
};
|
|
468
502
|
MsWordPaste.prototype.cleanUp = function (node, listNodes) {
|
|
469
|
-
// eslint-disable-next-line
|
|
470
503
|
var tempCleaner = [];
|
|
471
504
|
var prevflagState;
|
|
472
505
|
var allNodes = node.querySelectorAll('*');
|
|
@@ -667,7 +700,7 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
667
700
|
break;
|
|
668
701
|
}
|
|
669
702
|
}
|
|
670
|
-
if (!isNOU(prevList) && index
|
|
703
|
+
if (!isNOU(prevList) && index !== 0 &&
|
|
671
704
|
collection[index - 1].listType !== collection[index].listType &&
|
|
672
705
|
!isNormalList) {
|
|
673
706
|
prevList = null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FormatPainterValue } from '../
|
|
1
|
+
import { FormatPainterValue } from '../base/interface';
|
|
2
2
|
export declare class SelectionCommands {
|
|
3
3
|
static enterAction: string;
|
|
4
4
|
/**
|
|
@@ -28,4 +28,5 @@ export declare class SelectionCommands {
|
|
|
28
28
|
private static GetFormatNode;
|
|
29
29
|
private static updateStyles;
|
|
30
30
|
private static insertFormatPainterElem;
|
|
31
|
+
private static formatPainterCleanup;
|
|
31
32
|
}
|