@syncfusion/ej2-richtexteditor 24.1.47 → 24.2.4
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/CHANGELOG.md +30 -2
- 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 +832 -209
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +835 -203
- 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/constant.d.ts +6 -0
- package/src/common/constant.js +6 -0
- package/src/common/util.d.ts +6 -0
- package/src/common/util.js +58 -20
- package/src/editor-manager/base/constant.d.ts +6 -0
- package/src/editor-manager/base/constant.js +6 -0
- package/src/editor-manager/base/editor-manager.d.ts +5 -0
- package/src/editor-manager/base/editor-manager.js +59 -0
- package/src/editor-manager/base/interface.d.ts +8 -0
- package/src/editor-manager/plugin/dom-node.js +3 -1
- package/src/editor-manager/plugin/format-painter-actions.js +1 -1
- package/src/editor-manager/plugin/inserthtml.js +7 -2
- package/src/editor-manager/plugin/ms-word-clean-up.d.ts +2 -0
- package/src/editor-manager/plugin/ms-word-clean-up.js +39 -10
- package/src/editor-manager/plugin/selection-commands.js +16 -0
- package/src/editor-manager/plugin/table.d.ts +0 -1
- package/src/editor-manager/plugin/table.js +14 -26
- package/src/editor-manager/plugin/undo.d.ts +1 -0
- package/src/editor-manager/plugin/undo.js +21 -1
- package/src/rich-text-editor/actions/base-quick-toolbar.js +3 -0
- package/src/rich-text-editor/actions/base-toolbar.js +8 -4
- package/src/rich-text-editor/actions/count.js +1 -1
- package/src/rich-text-editor/actions/dropdown-buttons.js +21 -2
- package/src/rich-text-editor/actions/emoji-picker.js +1 -1
- package/src/rich-text-editor/actions/full-screen.js +1 -0
- package/src/rich-text-editor/actions/html-editor.d.ts +2 -0
- package/src/rich-text-editor/actions/html-editor.js +88 -4
- package/src/rich-text-editor/actions/keyboard.js +3 -1
- package/src/rich-text-editor/actions/paste-clean-up.d.ts +1 -0
- package/src/rich-text-editor/actions/paste-clean-up.js +32 -4
- package/src/rich-text-editor/actions/toolbar.d.ts +2 -1
- package/src/rich-text-editor/base/constant.d.ts +25 -0
- package/src/rich-text-editor/base/constant.js +194 -0
- package/src/rich-text-editor/base/interface.d.ts +6 -1
- package/src/rich-text-editor/base/rich-text-editor.d.ts +1 -0
- package/src/rich-text-editor/base/rich-text-editor.js +34 -64
- package/src/rich-text-editor/base/util.d.ts +4 -0
- package/src/rich-text-editor/base/util.js +35 -1
- package/src/rich-text-editor/formatter/formatter.js +15 -4
- package/src/rich-text-editor/models/default-locale.js +17 -17
- package/src/rich-text-editor/models/items.js +2 -2
- package/src/rich-text-editor/renderer/audio-module.d.ts +1 -0
- package/src/rich-text-editor/renderer/audio-module.js +13 -0
- package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -0
- package/src/rich-text-editor/renderer/dialog-renderer.js +7 -0
- package/src/rich-text-editor/renderer/iframe-content-renderer.js +1 -1
- package/src/rich-text-editor/renderer/image-module.d.ts +1 -0
- package/src/rich-text-editor/renderer/image-module.js +20 -2
- package/src/rich-text-editor/renderer/link-module.js +10 -1
- package/src/rich-text-editor/renderer/table-module.d.ts +2 -0
- package/src/rich-text-editor/renderer/table-module.js +22 -2
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +1 -0
- package/src/rich-text-editor/renderer/toolbar-renderer.js +25 -3
- package/src/rich-text-editor/renderer/video-module.d.ts +3 -0
- package/src/rich-text-editor/renderer/video-module.js +54 -30
- package/src/selection/selection.js +3 -0
- package/styles/bootstrap-dark.css +44 -6
- package/styles/bootstrap.css +44 -6
- package/styles/bootstrap4.css +44 -6
- package/styles/bootstrap5-dark.css +44 -6
- package/styles/bootstrap5.css +44 -6
- package/styles/fabric-dark.css +44 -6
- package/styles/fabric.css +44 -6
- package/styles/fluent-dark.css +44 -6
- package/styles/fluent.css +44 -6
- package/styles/highcontrast-light.css +44 -6
- package/styles/highcontrast.css +44 -6
- package/styles/material-dark.css +44 -6
- package/styles/material.css +44 -6
- package/styles/material3-dark.css +58 -14
- package/styles/material3.css +58 -14
- package/styles/rich-text-editor/_layout.scss +39 -2
- package/styles/rich-text-editor/_material-definition.scss +0 -1
- package/styles/rich-text-editor/_material3-definition.scss +7 -7
- package/styles/rich-text-editor/_theme.scss +12 -5
- package/styles/rich-text-editor/bootstrap-dark.css +44 -6
- package/styles/rich-text-editor/bootstrap.css +44 -6
- package/styles/rich-text-editor/bootstrap4.css +44 -6
- package/styles/rich-text-editor/bootstrap5-dark.css +44 -6
- package/styles/rich-text-editor/bootstrap5.css +44 -6
- package/styles/rich-text-editor/fabric-dark.css +44 -6
- package/styles/rich-text-editor/fabric.css +44 -6
- package/styles/rich-text-editor/fluent-dark.css +44 -6
- package/styles/rich-text-editor/fluent.css +44 -6
- package/styles/rich-text-editor/highcontrast-light.css +44 -6
- package/styles/rich-text-editor/highcontrast.css +44 -6
- package/styles/rich-text-editor/material-dark.css +44 -6
- package/styles/rich-text-editor/material.css +44 -6
- package/styles/rich-text-editor/material3-dark.css +58 -14
- package/styles/rich-text-editor/material3.css +58 -14
- package/styles/rich-text-editor/tailwind-dark.css +44 -6
- package/styles/rich-text-editor/tailwind.css +44 -6
- package/styles/tailwind-dark.css +44 -6
- package/styles/tailwind.css +44 -6
package/dist/global/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* filename: index.d.ts
|
|
3
|
-
* version : 24.
|
|
3
|
+
* version : 24.2.4
|
|
4
4
|
* Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
|
|
5
5
|
* Use of this code is subject to the terms of our license.
|
|
6
6
|
* A copy of the current license can be obtained at any time by e-mailing
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_from": "@syncfusion/ej2-richtexteditor@*",
|
|
3
|
-
"_id": "@syncfusion/ej2-richtexteditor@24.
|
|
3
|
+
"_id": "@syncfusion/ej2-richtexteditor@24.2.3",
|
|
4
4
|
"_inBundle": false,
|
|
5
|
-
"_integrity": "sha512-
|
|
5
|
+
"_integrity": "sha512-qjy4z7YGj17wCO4I5dW2kqGyRSaUxHXprYekBaF78kmtSAbFQjy8QFO9+15bOUEcNTPaTaPWHNvZ61Vm3+qOEw==",
|
|
6
6
|
"_location": "/@syncfusion/ej2-richtexteditor",
|
|
7
7
|
"_phantomChildren": {},
|
|
8
8
|
"_requested": {
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"/@syncfusion/ej2-react-richtexteditor",
|
|
26
26
|
"/@syncfusion/ej2-vue-richtexteditor"
|
|
27
27
|
],
|
|
28
|
-
"_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-24.
|
|
29
|
-
"_shasum": "
|
|
28
|
+
"_resolved": "https://nexus.syncfusion.com/repository/ej2-hotfix-new/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-24.2.3.tgz",
|
|
29
|
+
"_shasum": "c6180082b7903ea03940e96f5911e093ee6fab92",
|
|
30
30
|
"_spec": "@syncfusion/ej2-richtexteditor@*",
|
|
31
31
|
"_where": "/jenkins/workspace/elease-automation_release_24.1.1/packages/included",
|
|
32
32
|
"author": {
|
|
@@ -37,13 +37,13 @@
|
|
|
37
37
|
},
|
|
38
38
|
"bundleDependencies": false,
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@syncfusion/ej2-base": "~24.
|
|
41
|
-
"@syncfusion/ej2-buttons": "~24.
|
|
42
|
-
"@syncfusion/ej2-filemanager": "~24.
|
|
43
|
-
"@syncfusion/ej2-inputs": "~24.
|
|
44
|
-
"@syncfusion/ej2-navigations": "~24.
|
|
45
|
-
"@syncfusion/ej2-popups": "~24.
|
|
46
|
-
"@syncfusion/ej2-splitbuttons": "~24.
|
|
40
|
+
"@syncfusion/ej2-base": "~24.2.3",
|
|
41
|
+
"@syncfusion/ej2-buttons": "~24.2.3",
|
|
42
|
+
"@syncfusion/ej2-filemanager": "~24.2.3",
|
|
43
|
+
"@syncfusion/ej2-inputs": "~24.2.4",
|
|
44
|
+
"@syncfusion/ej2-navigations": "~24.2.4",
|
|
45
|
+
"@syncfusion/ej2-popups": "~24.2.3",
|
|
46
|
+
"@syncfusion/ej2-splitbuttons": "~24.2.3"
|
|
47
47
|
},
|
|
48
48
|
"deprecated": false,
|
|
49
49
|
"description": "Essential JS 2 RichTextEditor component",
|
|
@@ -69,6 +69,6 @@
|
|
|
69
69
|
"url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
|
|
70
70
|
},
|
|
71
71
|
"typings": "index.d.ts",
|
|
72
|
-
"version": "24.
|
|
72
|
+
"version": "24.2.4",
|
|
73
73
|
"sideEffects": false
|
|
74
74
|
}
|
package/src/common/constant.d.ts
CHANGED
package/src/common/constant.js
CHANGED
package/src/common/util.d.ts
CHANGED
|
@@ -34,3 +34,9 @@ export declare function getDefaultHtmlTbStatus(): IToolbarStatus;
|
|
|
34
34
|
* @hidden
|
|
35
35
|
*/
|
|
36
36
|
export declare function getDefaultMDTbStatus(): IToolbarStatus;
|
|
37
|
+
/**
|
|
38
|
+
* @param {Range} range - specifies the range
|
|
39
|
+
* @returns {void}
|
|
40
|
+
* @hidden
|
|
41
|
+
*/
|
|
42
|
+
export declare function nestedListCleanUp(range: Range): void;
|
package/src/common/util.js
CHANGED
|
@@ -82,30 +82,41 @@ export function updateTextNode(value, enterAction) {
|
|
|
82
82
|
}
|
|
83
83
|
var tableElm = resultElm.querySelectorAll('table');
|
|
84
84
|
for (var i = 0; i < tableElm.length; i++) {
|
|
85
|
-
if (tableElm[i].
|
|
86
|
-
tableElm[i].
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (tdElm[j].style.borderLeft === 'none') {
|
|
91
|
-
tdElm[j].style.removeProperty('border-left');
|
|
92
|
-
}
|
|
93
|
-
if (tdElm[j].style.borderRight === 'none') {
|
|
94
|
-
tdElm[j].style.removeProperty('border-right');
|
|
85
|
+
if (tableElm[i].classList.length > 0 && !tableElm[i].classList.contains('e-rte-table')) {
|
|
86
|
+
tableElm[i].classList.add('e-rte-paste-table');
|
|
87
|
+
if (tableElm[i].classList.contains('e-rte-paste-word-table')) {
|
|
88
|
+
tableElm[i].classList.remove('e-rte-paste-word-table');
|
|
89
|
+
continue; // Sking the removal of the border if the source is from word.
|
|
95
90
|
}
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
else if (tableElm[i].classList.contains('e-rte-paste-excel-table')) {
|
|
92
|
+
tableElm[i].classList.remove('e-rte-paste-excel-table');
|
|
93
|
+
if (tableElm[i].getAttribute('border') === '0') {
|
|
94
|
+
tableElm[i].removeAttribute('border');
|
|
95
|
+
}
|
|
96
|
+
var tdElm = tableElm[i].querySelectorAll('td');
|
|
97
|
+
for (var j = 0; j < tdElm.length; j++) {
|
|
98
|
+
if (tdElm[j].style.borderLeft === 'none') {
|
|
99
|
+
tdElm[j].style.removeProperty('border-left');
|
|
100
|
+
}
|
|
101
|
+
if (tdElm[j].style.borderRight === 'none') {
|
|
102
|
+
tdElm[j].style.removeProperty('border-right');
|
|
103
|
+
}
|
|
104
|
+
if (tdElm[j].style.borderBottom === 'none') {
|
|
105
|
+
tdElm[j].style.removeProperty('border-bottom');
|
|
106
|
+
}
|
|
107
|
+
if (tdElm[j].style.borderTop === 'none') {
|
|
108
|
+
tdElm[j].style.removeProperty('border-top');
|
|
109
|
+
}
|
|
110
|
+
if (tdElm[j].style.border === 'none') {
|
|
111
|
+
tdElm[j].style.removeProperty('border');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
101
114
|
}
|
|
102
|
-
if (
|
|
103
|
-
|
|
115
|
+
else if (tableElm[i].classList.contains('e-rte-paste-onenote-table')) {
|
|
116
|
+
tableElm[i].classList.remove('e-rte-paste-onenote-table');
|
|
117
|
+
continue;
|
|
104
118
|
}
|
|
105
119
|
}
|
|
106
|
-
if (!tableElm[i].classList.contains('e-rte-table')) {
|
|
107
|
-
tableElm[i].classList.add('e-rte-table');
|
|
108
|
-
}
|
|
109
120
|
}
|
|
110
121
|
var imageElm = resultElm.querySelectorAll('img');
|
|
111
122
|
for (var i = 0; i < imageElm.length; i++) {
|
|
@@ -179,3 +190,30 @@ export function getDefaultMDTbStatus() {
|
|
|
179
190
|
formats: null
|
|
180
191
|
};
|
|
181
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* @param {Range} range - specifies the range
|
|
195
|
+
* @returns {void}
|
|
196
|
+
* @hidden
|
|
197
|
+
*/
|
|
198
|
+
export function nestedListCleanUp(range) {
|
|
199
|
+
if (range.startContainer.parentElement.closest('ol,ul') !== null && range.endContainer.parentElement.closest('ol,ul') !== null) {
|
|
200
|
+
range.extractContents();
|
|
201
|
+
while ((range.startContainer.nodeName === "#text" ? range.startContainer.parentElement : range.startContainer).querySelectorAll('li :empty').length > 0 ||
|
|
202
|
+
(range.startContainer.nodeName === "#text" ? range.startContainer.parentElement : range.startContainer).querySelectorAll('ol :empty').length > 0) {
|
|
203
|
+
var emptyLI = (range.startContainer.nodeName === "#text" ? range.startContainer.parentElement : range.startContainer).querySelectorAll('li :empty');
|
|
204
|
+
if (emptyLI.length > 0) {
|
|
205
|
+
emptyLI.forEach(function (item) {
|
|
206
|
+
item.remove();
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
var liElem = (range.startContainer.nodeName === "#text" ? range.startContainer.parentElement : range.startContainer).querySelectorAll("li");
|
|
211
|
+
if (liElem.length > 0) {
|
|
212
|
+
liElem.forEach(function (item) {
|
|
213
|
+
if (item.firstChild.nodeName === "OL" || item.firstChild.nodeName === "UL") {
|
|
214
|
+
item.style.listStyleType = "none";
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -87,3 +87,9 @@ export var CLEAR_TYPE = 'clear-type';
|
|
|
87
87
|
* @hidden
|
|
88
88
|
*/
|
|
89
89
|
export var SELF_CLOSING_TAGS = ['area', 'base', 'br', 'embed', 'hr', 'img', 'input', 'param', 'source', 'track', 'wbr', 'iframe', 'td', 'table'];
|
|
90
|
+
/**
|
|
91
|
+
* Source
|
|
92
|
+
*
|
|
93
|
+
* @hidden
|
|
94
|
+
*/
|
|
95
|
+
export var PASTE_SOURCE = ['word', 'excel', 'onenote'];
|
|
@@ -79,4 +79,9 @@ export declare class EditorManager {
|
|
|
79
79
|
|
|
80
80
|
*/
|
|
81
81
|
execCommand<T>(command: ExecCommand, value: T, event?: Event, callBack?: Function, text?: string | Node, exeValue?: T, selector?: string, enterAction?: string): void;
|
|
82
|
+
private editorMouseDown;
|
|
83
|
+
private tripleClickSelection;
|
|
84
|
+
private getParentBlockNode;
|
|
85
|
+
private getLastTextNode;
|
|
86
|
+
private getFirstTextNode;
|
|
82
87
|
}
|
|
@@ -68,6 +68,7 @@ var EditorManager = /** @class */ (function () {
|
|
|
68
68
|
this.observer.on(EVENTS.MODEL_CHANGED, this.onPropertyChanged, this);
|
|
69
69
|
this.observer.on(EVENTS.MS_WORD_CLEANUP, this.onWordPaste, this);
|
|
70
70
|
this.observer.on(EVENTS.ON_BEGIN, this.onBegin, this);
|
|
71
|
+
this.observer.on(EVENTS.MOUSE_DOWN, this.editorMouseDown, this);
|
|
71
72
|
};
|
|
72
73
|
EditorManager.prototype.onWordPaste = function (e) {
|
|
73
74
|
this.observer.notify(EVENTS.MS_WORD_CLEANUP_PLUGIN, e);
|
|
@@ -211,6 +212,64 @@ var EditorManager = /** @class */ (function () {
|
|
|
211
212
|
event: event, callBack: callBack });
|
|
212
213
|
}
|
|
213
214
|
};
|
|
215
|
+
EditorManager.prototype.editorMouseDown = function (e) {
|
|
216
|
+
if (e.args.detail === 3) {
|
|
217
|
+
this.tripleClickSelection(e.args);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
EditorManager.prototype.tripleClickSelection = function (e) {
|
|
221
|
+
var range = this.nodeSelection.getRange(this.currentDocument);
|
|
222
|
+
var selection = this.nodeSelection.get(this.currentDocument);
|
|
223
|
+
if (selection.rangeCount > 0 && selection.toString() !== '') {
|
|
224
|
+
var startBlockNode = this.getParentBlockNode(range.startContainer);
|
|
225
|
+
var endBlockNode = this.getParentBlockNode(range.endContainer);
|
|
226
|
+
if (startBlockNode && endBlockNode && startBlockNode === endBlockNode) {
|
|
227
|
+
var newRange = this.currentDocument.createRange();
|
|
228
|
+
var startTextNode = this.getFirstTextNode(startBlockNode);
|
|
229
|
+
var endTextNode = this.getLastTextNode(endBlockNode);
|
|
230
|
+
if (startTextNode && endTextNode) {
|
|
231
|
+
newRange.setStart(startTextNode, 0);
|
|
232
|
+
newRange.setEnd(endTextNode, endTextNode.textContent.length);
|
|
233
|
+
this.nodeSelection.setRange(this.currentDocument, newRange);
|
|
234
|
+
e.preventDefault();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
EditorManager.prototype.getParentBlockNode = function (node) {
|
|
240
|
+
var treeWalker = this.currentDocument.createTreeWalker(this.editableElement, // root
|
|
241
|
+
NodeFilter.SHOW_ELEMENT, // whatToShow
|
|
242
|
+
{
|
|
243
|
+
acceptNode: function (currentNode) {
|
|
244
|
+
// Check if the node is a block element
|
|
245
|
+
var displayStyle = window.getComputedStyle(currentNode).display;
|
|
246
|
+
if (displayStyle.indexOf('inline') < 0) {
|
|
247
|
+
return NodeFilter.FILTER_ACCEPT;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
return NodeFilter.FILTER_SKIP;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
treeWalker.currentNode = node;
|
|
255
|
+
var blockParent = treeWalker.parentNode();
|
|
256
|
+
return blockParent;
|
|
257
|
+
};
|
|
258
|
+
EditorManager.prototype.getLastTextNode = function (node) {
|
|
259
|
+
var treeWalker = this.currentDocument.createTreeWalker(node, NodeFilter.SHOW_TEXT, null);
|
|
260
|
+
var lastTextNode = null;
|
|
261
|
+
var currentNode = treeWalker.nextNode();
|
|
262
|
+
while (currentNode) {
|
|
263
|
+
lastTextNode = currentNode;
|
|
264
|
+
currentNode = treeWalker.nextNode();
|
|
265
|
+
}
|
|
266
|
+
return lastTextNode;
|
|
267
|
+
};
|
|
268
|
+
EditorManager.prototype.getFirstTextNode = function (node) {
|
|
269
|
+
var treeWalker = this.currentDocument.createTreeWalker(node, NodeFilter.SHOW_TEXT, null);
|
|
270
|
+
var firstTextNode = treeWalker.nextNode();
|
|
271
|
+
return firstTextNode;
|
|
272
|
+
};
|
|
214
273
|
return EditorManager;
|
|
215
274
|
}());
|
|
216
275
|
export { EditorManager };
|
|
@@ -573,7 +573,9 @@ var DOMNode = /** @class */ (function () {
|
|
|
573
573
|
else if (start.tagName === 'BR') {
|
|
574
574
|
this.replaceWith(start, this.marker(className, this.encode(start.textContent)));
|
|
575
575
|
var markerStart = range.startContainer.querySelector('.' + className);
|
|
576
|
-
markerStart
|
|
576
|
+
if (markerStart) {
|
|
577
|
+
markerStart.parentElement.appendChild(start);
|
|
578
|
+
}
|
|
577
579
|
}
|
|
578
580
|
else {
|
|
579
581
|
if (start.tagName === 'IMG') {
|
|
@@ -174,7 +174,7 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
174
174
|
};
|
|
175
175
|
FormatPainterActions.prototype.copyAction = function () {
|
|
176
176
|
var copyCollection = [];
|
|
177
|
-
var range = this.parent.nodeSelection.getRange(
|
|
177
|
+
var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
|
|
178
178
|
var domSelection = this.parent.nodeSelection;
|
|
179
179
|
var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :
|
|
180
180
|
domSelection.getSelectionNodeCollectionBr(range);
|
|
@@ -3,7 +3,7 @@ import { NodeCutter } from './nodecutter';
|
|
|
3
3
|
import * as CONSTANT from './../base/constant';
|
|
4
4
|
import { detach, Browser, isNullOrUndefined as isNOU, createElement, closest } from '@syncfusion/ej2-base';
|
|
5
5
|
import { InsertMethods } from './insert-methods';
|
|
6
|
-
import { updateTextNode } from './../../common/util';
|
|
6
|
+
import { updateTextNode, nestedListCleanUp } from './../../common/util';
|
|
7
7
|
/**
|
|
8
8
|
* Insert a HTML Node or Text
|
|
9
9
|
*
|
|
@@ -82,7 +82,12 @@ var InsertHtml = /** @class */ (function () {
|
|
|
82
82
|
lasNode.textContent.length : lasNode.childNodes.length);
|
|
83
83
|
range = nodeSelection.getRange(docElement);
|
|
84
84
|
}
|
|
85
|
-
range.
|
|
85
|
+
if (range.startContainer.parentElement.closest('ol,ul') !== null && range.endContainer.parentElement.closest('ol,ul') !== null) {
|
|
86
|
+
nestedListCleanUp(range);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
range.extractContents();
|
|
90
|
+
}
|
|
86
91
|
if (insertNode.tagName === 'TABLE') {
|
|
87
92
|
this.removeEmptyElements(editNode);
|
|
88
93
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as EVENTS from '../../common/constant';
|
|
2
2
|
import { createElement, isNullOrUndefined as isNOU, detach } from '@syncfusion/ej2-base';
|
|
3
|
+
import { PASTE_SOURCE } from '../base/constant';
|
|
3
4
|
/**
|
|
4
5
|
* PasteCleanup for MsWord content
|
|
5
6
|
*
|
|
@@ -66,6 +67,7 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
66
67
|
var pattern4 = /style='mso-width-source:/i;
|
|
67
68
|
if (patern.test(tempHTMLContent) || patern2.test(tempHTMLContent) || patern3.test(tempHTMLContent) ||
|
|
68
69
|
pattern4.test(tempHTMLContent)) {
|
|
70
|
+
var source = this.findSource(elm);
|
|
69
71
|
this.imageConversion(elm, rtfData);
|
|
70
72
|
tempHTMLContent = tempHTMLContent.replace(/<img[^>]+>/i, '');
|
|
71
73
|
this.addListClass(elm);
|
|
@@ -86,16 +88,8 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
86
88
|
if (pattern4.test(tempHTMLContent)) {
|
|
87
89
|
this.addTableBorderClass(elm);
|
|
88
90
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (liChildren.length > 0) {
|
|
92
|
-
for (var i = 0; i < liChildren.length; i++) {
|
|
93
|
-
if (!isNOU(liChildren[i].style.marginLeft)) {
|
|
94
|
-
liChildren[i].style.marginLeft = '';
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
e.callBack(elm.innerHTML, this.cropImageDimensions);
|
|
91
|
+
this.processMargin(elm);
|
|
92
|
+
e.callBack(elm.innerHTML, this.cropImageDimensions, source);
|
|
99
93
|
}
|
|
100
94
|
else {
|
|
101
95
|
e.callBack(elm.innerHTML);
|
|
@@ -929,6 +923,25 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
929
923
|
}
|
|
930
924
|
this.listContents.push(elem.innerHTML);
|
|
931
925
|
};
|
|
926
|
+
MsWordPaste.prototype.processMargin = function (element) {
|
|
927
|
+
var liChildren = element.querySelectorAll('li');
|
|
928
|
+
if (liChildren.length > 0) {
|
|
929
|
+
for (var i = 0; i < liChildren.length; i++) {
|
|
930
|
+
if (!isNOU((liChildren[i]).style.marginLeft)) {
|
|
931
|
+
(liChildren[i]).style.marginLeft = '';
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
var tableChildren = element.querySelectorAll('table');
|
|
936
|
+
if (tableChildren.length > 0) {
|
|
937
|
+
for (var i = 0; i < tableChildren.length; i++) {
|
|
938
|
+
if (!isNOU((tableChildren[i]).style.marginLeft) &&
|
|
939
|
+
(tableChildren[i]).style.marginLeft.indexOf('-') >= 0) {
|
|
940
|
+
(tableChildren[i]).style.marginLeft = '';
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
};
|
|
932
945
|
MsWordPaste.prototype.removeEmptyAnchorTag = function (element) {
|
|
933
946
|
var removableElement = element.querySelectorAll('a:not([href])');
|
|
934
947
|
for (var j = removableElement.length - 1; j >= 0; j--) {
|
|
@@ -939,6 +952,22 @@ var MsWordPaste = /** @class */ (function () {
|
|
|
939
952
|
parentElem.removeChild(removableElement[j]);
|
|
940
953
|
}
|
|
941
954
|
};
|
|
955
|
+
MsWordPaste.prototype.findSource = function (element) {
|
|
956
|
+
var metaNodes = element.querySelectorAll('meta');
|
|
957
|
+
for (var i = 0; i < metaNodes.length; i++) {
|
|
958
|
+
var metaNode = metaNodes[i];
|
|
959
|
+
var content = metaNode.getAttribute('content');
|
|
960
|
+
var name_1 = metaNode.getAttribute('name');
|
|
961
|
+
if (name_1 && name_1.toLowerCase().indexOf('generator') >= 0 && content && content.toLowerCase().indexOf('microsoft') >= 0) {
|
|
962
|
+
for (var j = 0; j < PASTE_SOURCE.length; j++) {
|
|
963
|
+
if (content.toLowerCase().indexOf(PASTE_SOURCE[j]) >= 0) {
|
|
964
|
+
return PASTE_SOURCE[j];
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
return 'html';
|
|
970
|
+
};
|
|
942
971
|
return MsWordPaste;
|
|
943
972
|
}());
|
|
944
973
|
export { MsWordPaste };
|
|
@@ -38,6 +38,22 @@ var SelectionCommands = /** @class */ (function () {
|
|
|
38
38
|
var nodeCutter = new NodeCutter();
|
|
39
39
|
var isFormatted = new IsFormatted();
|
|
40
40
|
var range = domSelection.getRange(docElement);
|
|
41
|
+
if (Browser.userAgent.indexOf('Firefox') !== -1 && range.startContainer === range.endContainer && !isNOU(endNode) && range.startContainer === endNode) {
|
|
42
|
+
var startChildNodes = range.startContainer.childNodes;
|
|
43
|
+
var startNode = ((startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) :
|
|
44
|
+
range.startOffset]) || range.startContainer);
|
|
45
|
+
var endNode_1 = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) :
|
|
46
|
+
range.endOffset] || range.endContainer);
|
|
47
|
+
var lastSelectionNode = (endNode_1.lastChild.nodeName === 'BR' ? (isNOU(endNode_1.lastChild.previousSibling) ? endNode_1
|
|
48
|
+
: endNode_1.lastChild.previousSibling) : endNode_1.firstChild);
|
|
49
|
+
while (!isNOU(lastSelectionNode) && lastSelectionNode.nodeName !== '#text' && lastSelectionNode.nodeName !== 'IMG' &&
|
|
50
|
+
lastSelectionNode.nodeName !== 'BR' && lastSelectionNode.nodeName !== 'HR') {
|
|
51
|
+
lastSelectionNode = lastSelectionNode.lastChild;
|
|
52
|
+
}
|
|
53
|
+
;
|
|
54
|
+
domSelection.setSelectionText(docElement, startNode, lastSelectionNode, 0, 0);
|
|
55
|
+
range = domSelection.getRange(docElement);
|
|
56
|
+
}
|
|
41
57
|
var save = domSelection.save(range, docElement);
|
|
42
58
|
var nodes = range.collapsed ? domSelection.getSelectionNodeCollection(range) :
|
|
43
59
|
domSelection.getSelectionNodeCollectionBr(range);
|
|
@@ -60,7 +60,6 @@ var TableCommand = /** @class */ (function () {
|
|
|
60
60
|
table.appendChild(tblBody);
|
|
61
61
|
e.item.selection.restore();
|
|
62
62
|
InsertHtml.Insert(this.parent.currentDocument, table, this.parent.editableElement);
|
|
63
|
-
this.removeEmptyNode();
|
|
64
63
|
e.item.selection.setSelectionText(this.parent.currentDocument, table.querySelector('td'), table.querySelector('td'), 0, 0);
|
|
65
64
|
if (table.nextElementSibling === null) {
|
|
66
65
|
var insertElem = void 0;
|
|
@@ -104,24 +103,6 @@ var TableCommand = /** @class */ (function () {
|
|
|
104
103
|
}
|
|
105
104
|
return styleValue;
|
|
106
105
|
};
|
|
107
|
-
TableCommand.prototype.removeEmptyNode = function () {
|
|
108
|
-
var emptyUl = this.parent.editableElement.querySelectorAll('ul:empty, ol:empty');
|
|
109
|
-
for (var i = 0; i < emptyUl.length; i++) {
|
|
110
|
-
detach(emptyUl[i]);
|
|
111
|
-
}
|
|
112
|
-
var emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty:not(img)');
|
|
113
|
-
for (var i = 0; i < emptyLiChild.length; i++) {
|
|
114
|
-
detach(emptyLiChild[i]);
|
|
115
|
-
if (emptyLiChild.length === i + 1) {
|
|
116
|
-
emptyLiChild = this.parent.editableElement.querySelectorAll('li *:empty:not(img)');
|
|
117
|
-
i = -1;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
var emptyLi = this.parent.editableElement.querySelectorAll('li:empty');
|
|
121
|
-
for (var i = 0; i < emptyLi.length; i++) {
|
|
122
|
-
detach(emptyLi[i]);
|
|
123
|
-
}
|
|
124
|
-
};
|
|
125
106
|
TableCommand.prototype.insertAfter = function (newNode, referenceNode) {
|
|
126
107
|
referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
|
|
127
108
|
};
|
|
@@ -472,14 +453,21 @@ var TableCommand = /** @class */ (function () {
|
|
|
472
453
|
}
|
|
473
454
|
};
|
|
474
455
|
TableCommand.prototype.tableVerticalAlign = function (e) {
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
456
|
+
var value = '';
|
|
457
|
+
switch (e.item.subCommand) {
|
|
458
|
+
case 'AlignTop':
|
|
459
|
+
value = 'top';
|
|
460
|
+
break;
|
|
461
|
+
case 'AlignMiddle':
|
|
462
|
+
value = 'middle';
|
|
463
|
+
break;
|
|
464
|
+
case 'AlignBottom':
|
|
465
|
+
value = 'bottom';
|
|
466
|
+
break;
|
|
480
467
|
}
|
|
481
|
-
|
|
482
|
-
|
|
468
|
+
e.item.tableCell.style.verticalAlign = value;
|
|
469
|
+
if (value && value !== '' && e.item.tableCell.getAttribute('valign')) {
|
|
470
|
+
e.item.tableCell.removeAttribute('valign');
|
|
483
471
|
}
|
|
484
472
|
if (e.callBack) {
|
|
485
473
|
e.callBack({
|
|
@@ -98,6 +98,25 @@ var UndoRedoManager = /** @class */ (function () {
|
|
|
98
98
|
}
|
|
99
99
|
return textContent;
|
|
100
100
|
};
|
|
101
|
+
UndoRedoManager.prototype.isElementStructureEqual = function (previousFragment, currentFragment) {
|
|
102
|
+
if (previousFragment.childNodes.length !== currentFragment.childNodes.length) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
for (var i = 0; i < previousFragment.childNodes.length; i++) {
|
|
106
|
+
var previousFragmentNode = previousFragment.childNodes[i];
|
|
107
|
+
var currentFragmentNode = currentFragment.childNodes[i];
|
|
108
|
+
if (!previousFragmentNode || !currentFragmentNode) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
if (previousFragmentNode.nodeType !== currentFragmentNode.nodeType) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
if (previousFragmentNode.outerHTML !== currentFragmentNode.outerHTML) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return true;
|
|
119
|
+
};
|
|
101
120
|
/**
|
|
102
121
|
* RTE collection stored html format.
|
|
103
122
|
*
|
|
@@ -134,7 +153,8 @@ var UndoRedoManager = /** @class */ (function () {
|
|
|
134
153
|
(this.undoRedoStack[this.undoRedoStack.length - 1].range.endOffset === save.range.endOffset) &&
|
|
135
154
|
(this.undoRedoStack[this.undoRedoStack.length - 1].range.range.startContainer === save.range.startContainer) &&
|
|
136
155
|
(this.getTextContentFromFragment(this.undoRedoStack[this.undoRedoStack.length - 1].text).trim() ===
|
|
137
|
-
this.getTextContentFromFragment(changEle.text).trim())
|
|
156
|
+
this.getTextContentFromFragment(changEle.text).trim()) &&
|
|
157
|
+
this.isElementStructureEqual(this.undoRedoStack[this.undoRedoStack.length - 1].text, changEle.text)) {
|
|
138
158
|
return;
|
|
139
159
|
}
|
|
140
160
|
this.undoRedoStack.push(changEle);
|
|
@@ -320,6 +320,9 @@ var BaseQuickToolbar = /** @class */ (function () {
|
|
|
320
320
|
this.parent.enableToolbarItem(this.parent.toolbarSettings.items);
|
|
321
321
|
}
|
|
322
322
|
}
|
|
323
|
+
if (this.parent.showTooltip && !isNOU(document.querySelector('.e-tooltip-wrap'))) {
|
|
324
|
+
this.parent.notify(events.destroyTooltip, { args: event });
|
|
325
|
+
}
|
|
323
326
|
this.removeEleFromDOM();
|
|
324
327
|
this.isDOMElement = false;
|
|
325
328
|
};
|
|
@@ -154,10 +154,14 @@ var BaseToolbar = /** @class */ (function () {
|
|
|
154
154
|
_this.parent.formatter.saveData();
|
|
155
155
|
}
|
|
156
156
|
callback_1.call(_this);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
if (_this.parent.formatter.getUndoRedoStack().length > 0) {
|
|
158
|
+
var currentContentElem = _this.parent.createElement('div');
|
|
159
|
+
var stackItem = _this.parent.formatter.getUndoRedoStack()[_this.parent.formatter.getUndoRedoStack().length - 1];
|
|
160
|
+
var clonedItem = (stackItem.text).cloneNode(true);
|
|
161
|
+
currentContentElem.appendChild(clonedItem);
|
|
162
|
+
if (currentContentElem.innerHTML.trim() === _this.parent.inputElement.innerHTML.trim()) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
161
165
|
}
|
|
162
166
|
if (proxy_1.undo) {
|
|
163
167
|
_this.parent.formatter.saveData();
|
|
@@ -35,7 +35,7 @@ var Count = /** @class */ (function () {
|
|
|
35
35
|
};
|
|
36
36
|
Count.prototype.appendCount = function () {
|
|
37
37
|
var htmlText = this.parent.editorMode === 'Markdown' ? this.editPanel.value :
|
|
38
|
-
this.
|
|
38
|
+
(this.parent.getText().replace(/(\r\n|\n|\r|\t)/gm, ''));
|
|
39
39
|
if (this.parent.editorMode !== 'Markdown' && htmlText.indexOf('\u200B') !== -1) {
|
|
40
40
|
this.htmlLength = htmlText.replace(/\u200B/g, '').length;
|
|
41
41
|
}
|