@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.
- package/CHANGELOG.md +32 -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 +1623 -639
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +1638 -646
- 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 +13 -13
- package/src/common/config.js +3 -1
- package/src/common/constant.d.ts +6 -0
- package/src/common/constant.js +6 -0
- package/src/common/util.d.ts +2 -1
- package/src/common/util.js +15 -6
- package/src/editor-manager/base/editor-manager.d.ts +2 -0
- package/src/editor-manager/base/editor-manager.js +6 -1
- package/src/editor-manager/base/enum.d.ts +14 -0
- package/src/editor-manager/base/interface.d.ts +34 -0
- package/src/editor-manager/plugin/clearformat.js +13 -4
- package/src/editor-manager/plugin/format-painter-actions.d.ts +63 -0
- package/src/editor-manager/plugin/format-painter-actions.js +474 -0
- package/src/editor-manager/plugin/image.js +0 -1
- package/src/editor-manager/plugin/inserthtml-exec.js +1 -1
- package/src/editor-manager/plugin/inserthtml.d.ts +1 -1
- package/src/editor-manager/plugin/inserthtml.js +18 -10
- package/src/editor-manager/plugin/isformatted.js +1 -0
- package/src/editor-manager/plugin/link.js +0 -1
- package/src/editor-manager/plugin/lists.js +1 -1
- package/src/editor-manager/plugin/ms-word-clean-up.js +57 -19
- package/src/editor-manager/plugin/selection-commands.d.ts +4 -1
- package/src/editor-manager/plugin/selection-commands.js +70 -9
- package/src/editor-manager/plugin/video.js +2 -0
- 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.d.ts +1 -0
- package/src/rich-text-editor/actions/base-quick-toolbar.js +21 -1
- package/src/rich-text-editor/actions/base-toolbar.js +33 -10
- package/src/rich-text-editor/actions/enter-key.js +23 -16
- package/src/rich-text-editor/actions/format-painter.d.ts +24 -0
- package/src/rich-text-editor/actions/format-painter.js +142 -0
- package/src/rich-text-editor/actions/full-screen.js +0 -1
- package/src/rich-text-editor/actions/html-editor.d.ts +1 -0
- package/src/rich-text-editor/actions/html-editor.js +117 -97
- package/src/rich-text-editor/actions/paste-clean-up.js +2 -2
- package/src/rich-text-editor/actions/quick-toolbar.js +8 -1
- package/src/rich-text-editor/actions/toolbar.js +10 -0
- 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 +4 -0
- package/src/rich-text-editor/base/interface.d.ts +30 -3
- package/src/rich-text-editor/base/interface.js +12 -0
- package/src/rich-text-editor/base/rich-text-editor-model.d.ts +30 -4
- package/src/rich-text-editor/base/rich-text-editor.d.ts +35 -5
- package/src/rich-text-editor/base/rich-text-editor.js +46 -10
- package/src/rich-text-editor/base/util.js +2 -0
- package/src/rich-text-editor/formatter/formatter.js +22 -13
- package/src/rich-text-editor/formatter/html-formatter.d.ts +5 -3
- package/src/rich-text-editor/formatter/html-formatter.js +7 -5
- package/src/rich-text-editor/models/default-locale.js +4 -2
- package/src/rich-text-editor/models/items.d.ts +3 -0
- package/src/rich-text-editor/models/items.js +32 -0
- package/src/rich-text-editor/models/toolbar-settings-model.d.ts +29 -1
- package/src/rich-text-editor/models/toolbar-settings.d.ts +24 -1
- package/src/rich-text-editor/models/toolbar-settings.js +20 -0
- package/src/rich-text-editor/renderer/audio-module.js +6 -3
- package/src/rich-text-editor/renderer/image-module.js +11 -6
- package/src/rich-text-editor/renderer/link-module.js +2 -1
- package/src/rich-text-editor/renderer/table-module.js +18 -6
- package/src/rich-text-editor/renderer/toolbar-renderer.js +10 -1
- package/src/rich-text-editor/renderer/video-module.js +8 -5
- package/src/rich-text-editor/renderer/view-source.js +1 -1
- package/styles/bootstrap-dark.css +31 -1
- package/styles/bootstrap.css +31 -1
- package/styles/bootstrap4.css +31 -1
- package/styles/bootstrap5-dark.css +32 -2
- package/styles/bootstrap5.css +32 -2
- package/styles/fabric-dark.css +31 -1
- package/styles/fabric.css +31 -1
- package/styles/fluent-dark.css +34 -4
- package/styles/fluent.css +34 -4
- package/styles/highcontrast-light.css +31 -1
- package/styles/highcontrast.css +31 -1
- package/styles/material-dark.css +31 -1
- package/styles/material.css +31 -1
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +25 -1
- package/styles/rich-text-editor/_bootstrap-definition.scss +25 -1
- package/styles/rich-text-editor/_bootstrap4-definition.scss +25 -1
- package/styles/rich-text-editor/_bootstrap5-definition.scss +28 -5
- package/styles/rich-text-editor/_fabric-dark-definition.scss +25 -1
- package/styles/rich-text-editor/_fabric-definition.scss +25 -1
- package/styles/rich-text-editor/_fluent-definition.scss +30 -7
- package/styles/rich-text-editor/_fusionnew-definition.scss +26 -3
- package/styles/rich-text-editor/_highcontrast-definition.scss +25 -1
- package/styles/rich-text-editor/_highcontrast-light-definition.scss +25 -1
- package/styles/rich-text-editor/_layout.scss +47 -15
- package/styles/rich-text-editor/_material-dark-definition.scss +26 -1
- package/styles/rich-text-editor/_material-definition.scss +25 -1
- package/styles/rich-text-editor/_tailwind-definition.scss +28 -5
- package/styles/rich-text-editor/_theme.scss +54 -6
- package/styles/rich-text-editor/bootstrap-dark.css +31 -1
- package/styles/rich-text-editor/bootstrap.css +31 -1
- package/styles/rich-text-editor/bootstrap4.css +31 -1
- package/styles/rich-text-editor/bootstrap5-dark.css +32 -2
- package/styles/rich-text-editor/bootstrap5.css +32 -2
- package/styles/rich-text-editor/fabric-dark.css +31 -1
- package/styles/rich-text-editor/fabric.css +31 -1
- package/styles/rich-text-editor/fluent-dark.css +34 -4
- package/styles/rich-text-editor/fluent.css +34 -4
- package/styles/rich-text-editor/highcontrast-light.css +31 -1
- package/styles/rich-text-editor/highcontrast.css +31 -1
- package/styles/rich-text-editor/icons/_bootstrap-dark.scss +8 -0
- package/styles/rich-text-editor/icons/_bootstrap.scss +8 -0
- package/styles/rich-text-editor/icons/_bootstrap4.scss +8 -0
- package/styles/rich-text-editor/icons/_bootstrap5.scss +8 -0
- package/styles/rich-text-editor/icons/_fabric-dark.scss +8 -0
- package/styles/rich-text-editor/icons/_fabric.scss +8 -0
- package/styles/rich-text-editor/icons/_fluent.scss +8 -0
- package/styles/rich-text-editor/icons/_fusionnew.scss +8 -0
- package/styles/rich-text-editor/icons/_highcontrast-light.scss +8 -0
- package/styles/rich-text-editor/icons/_highcontrast.scss +8 -0
- package/styles/rich-text-editor/icons/_material-dark.scss +8 -0
- package/styles/rich-text-editor/icons/_material.scss +8 -0
- package/styles/rich-text-editor/icons/_material3.scss +8 -0
- package/styles/rich-text-editor/icons/_tailwind.scss +8 -0
- package/styles/rich-text-editor/material-dark.css +31 -1
- package/styles/rich-text-editor/material.css +31 -1
- package/styles/rich-text-editor/tailwind-dark.css +31 -1
- package/styles/rich-text-editor/tailwind.css +31 -1
- package/styles/tailwind-dark.css +31 -1
- package/styles/tailwind.css +31 -1
- package/GitLeaksReport.json +0 -1
- package/gitleaks-ci/gitleaks +0 -0
- package/gitleaks-ci.tar.gz +0 -0
- package/styles/rich-text-editor/_material3-definition.scss +0 -196
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { addClass, isNullOrUndefined as isNOU, removeClass } from '@syncfusion/ej2-base';
|
|
2
|
+
import * as events from '../base/constant';
|
|
3
|
+
var FormatPainter = /** @class */ (function () {
|
|
4
|
+
function FormatPainter(parent) {
|
|
5
|
+
this.isSticky = false;
|
|
6
|
+
this.isActive = false;
|
|
7
|
+
this.parent = parent;
|
|
8
|
+
this.addEventListener();
|
|
9
|
+
}
|
|
10
|
+
FormatPainter.prototype.addEventListener = function () {
|
|
11
|
+
this.parent.on(events.formatPainterClick, this.toolbarClick, this);
|
|
12
|
+
this.parent.on(events.formatPainterDoubleClick, this.toolbarDoubleClick, this);
|
|
13
|
+
this.parent.on(events.editAreaClick, this.editAreaClick, this);
|
|
14
|
+
this.parent.on(events.keyDown, this.onKeyDown, this);
|
|
15
|
+
this.parent.on(events.destroy, this.destroy, this);
|
|
16
|
+
};
|
|
17
|
+
FormatPainter.prototype.toolbarClick = function (args) {
|
|
18
|
+
this.isActive = true;
|
|
19
|
+
this.parent.focusIn();
|
|
20
|
+
this.actionHandler(args, 'click');
|
|
21
|
+
};
|
|
22
|
+
FormatPainter.prototype.toolbarDoubleClick = function (args) {
|
|
23
|
+
this.isActive = true;
|
|
24
|
+
this.isSticky = true;
|
|
25
|
+
this.parent.focusIn();
|
|
26
|
+
this.actionHandler(args, 'dbClick');
|
|
27
|
+
};
|
|
28
|
+
FormatPainter.prototype.onKeyDown = function (event) {
|
|
29
|
+
var originalEvent = event.args;
|
|
30
|
+
if ((originalEvent.ctrlKey && originalEvent.shiftKey && (originalEvent.action === 'format-copy' || originalEvent.action === 'format-paste'))
|
|
31
|
+
|| (originalEvent.action === 'escape' && (this.previousAction === 'format-copy' || this.previousAction === 'format-paste'))) {
|
|
32
|
+
if (!isNOU(originalEvent.key) && originalEvent.key.toLowerCase() === 'c') {
|
|
33
|
+
originalEvent.preventDefault();
|
|
34
|
+
}
|
|
35
|
+
if (!isNOU(originalEvent.key) && originalEvent.key.toLowerCase() === 'v' &&
|
|
36
|
+
this.previousAction === 'format-copy' || this.previousAction === 'format-paste' || this.isSticky) {
|
|
37
|
+
originalEvent.preventDefault();
|
|
38
|
+
}
|
|
39
|
+
this.actionHandler(event, 'keyBoard');
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
FormatPainter.prototype.actionHandler = function (event, type) {
|
|
43
|
+
var action;
|
|
44
|
+
var isKeyboard = false;
|
|
45
|
+
var originalEvent;
|
|
46
|
+
var args;
|
|
47
|
+
var item;
|
|
48
|
+
switch (type) {
|
|
49
|
+
case 'dbClick':
|
|
50
|
+
args = event.args;
|
|
51
|
+
item = args.item;
|
|
52
|
+
originalEvent = event.args.originalEvent;
|
|
53
|
+
action = 'format-copy';
|
|
54
|
+
break;
|
|
55
|
+
case 'keyBoard':
|
|
56
|
+
args = null;
|
|
57
|
+
originalEvent = event.args;
|
|
58
|
+
isKeyboard = true;
|
|
59
|
+
action = event.args.action;
|
|
60
|
+
if (action === 'escape') {
|
|
61
|
+
this.isSticky = false;
|
|
62
|
+
this.isActive = false;
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case 'click':
|
|
66
|
+
args = event.args;
|
|
67
|
+
item = args.item;
|
|
68
|
+
originalEvent = event.args.originalEvent;
|
|
69
|
+
action = 'format-copy';
|
|
70
|
+
break;
|
|
71
|
+
case 'docClick':
|
|
72
|
+
originalEvent = event;
|
|
73
|
+
action = 'format-paste';
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
this.updateCursor(isKeyboard);
|
|
77
|
+
var enable = type === 'docClick' || action === 'escape' ? false : true;
|
|
78
|
+
this.updateToolbarBtn(enable);
|
|
79
|
+
if (isNOU(item)) {
|
|
80
|
+
item = {
|
|
81
|
+
command: 'FormatPainter',
|
|
82
|
+
subCommand: 'FormatPainter'
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
var actionBeginArgs = {
|
|
86
|
+
requestType: 'FormatPainter', originalEvent: originalEvent, name: action, item: item
|
|
87
|
+
};
|
|
88
|
+
var value = {
|
|
89
|
+
formatPainterAction: action
|
|
90
|
+
};
|
|
91
|
+
this.parent.formatter.process(this.parent, actionBeginArgs, originalEvent, value);
|
|
92
|
+
this.previousAction = action;
|
|
93
|
+
};
|
|
94
|
+
FormatPainter.prototype.updateCursor = function (isKeyboard) {
|
|
95
|
+
if (!this.parent.inputElement.classList.contains('e-rte-cursor-brush') && !isKeyboard) {
|
|
96
|
+
addClass([this.parent.inputElement], 'e-rte-cursor-brush');
|
|
97
|
+
}
|
|
98
|
+
else if (!this.isSticky) {
|
|
99
|
+
removeClass([this.parent.inputElement], 'e-rte-cursor-brush');
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
FormatPainter.prototype.updateToolbarBtn = function (enable) {
|
|
103
|
+
var toolbarBtn = this.parent.element.querySelector('.e-rte-format-painter').parentElement.parentElement;
|
|
104
|
+
if (enable) {
|
|
105
|
+
addClass([toolbarBtn], 'e-active');
|
|
106
|
+
}
|
|
107
|
+
else if (!this.isSticky) {
|
|
108
|
+
removeClass([toolbarBtn], 'e-active');
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
FormatPainter.prototype.editAreaClick = function (args) {
|
|
112
|
+
if (this.isActive) {
|
|
113
|
+
if (!this.isSticky) {
|
|
114
|
+
this.isActive = false;
|
|
115
|
+
}
|
|
116
|
+
this.actionHandler(args, 'docClick');
|
|
117
|
+
this.updateToolbarBtn(false);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
FormatPainter.prototype.destroy = function () {
|
|
121
|
+
/**Removeeventlistener */
|
|
122
|
+
if (this.parent.isDestroyed) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.parent.off(events.formatPainterClick, this.toolbarClick);
|
|
126
|
+
this.parent.off(events.editAreaClick, this.editAreaClick);
|
|
127
|
+
this.parent.off(events.formatPainterDoubleClick, this.toolbarDoubleClick);
|
|
128
|
+
this.parent.off(events.keyDown, this.onKeyDown);
|
|
129
|
+
this.parent.off(events.destroy, this.destroy);
|
|
130
|
+
};
|
|
131
|
+
/**
|
|
132
|
+
* For internal use only - Get the module name.
|
|
133
|
+
*
|
|
134
|
+
* @returns {void}
|
|
135
|
+
* @hidden
|
|
136
|
+
*/
|
|
137
|
+
FormatPainter.prototype.getModuleName = function () {
|
|
138
|
+
return 'formatPainter';
|
|
139
|
+
};
|
|
140
|
+
return FormatPainter;
|
|
141
|
+
}());
|
|
142
|
+
export { FormatPainter };
|
|
@@ -106,7 +106,6 @@ var FullScreen = /** @class */ (function () {
|
|
|
106
106
|
_this.parent.toolbarModule.addFixedTBarClass();
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
-
_this.parent.refreshUI();
|
|
110
109
|
_this.parent.trigger(events.actionComplete, { requestType: 'Minimize', targetItem: 'Minimize', args: event });
|
|
111
110
|
}
|
|
112
111
|
});
|
|
@@ -561,117 +561,136 @@ var HtmlEditor = /** @class */ (function () {
|
|
|
561
561
|
}
|
|
562
562
|
};
|
|
563
563
|
HtmlEditor.prototype.onToolbarClick = function (args) {
|
|
564
|
+
var _this = this;
|
|
564
565
|
var save;
|
|
565
566
|
var selectNodeEle;
|
|
566
567
|
var selectParentEle;
|
|
567
568
|
var item = args.item;
|
|
568
569
|
var closestElement = closest(args.originalEvent.target, '.e-rte-quick-popup');
|
|
569
|
-
if (
|
|
570
|
-
if (
|
|
571
|
-
item.subCommand === '
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);
|
|
578
|
-
selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);
|
|
579
|
-
}
|
|
580
|
-
if (item.command === 'Images') {
|
|
581
|
-
this.parent.notify(events.imageToolbarAction, {
|
|
582
|
-
member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
583
|
-
});
|
|
584
|
-
}
|
|
585
|
-
if (item.command === 'Audios') {
|
|
586
|
-
this.parent.notify(events.audioToolbarAction, {
|
|
587
|
-
member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
588
|
-
});
|
|
589
|
-
}
|
|
590
|
-
if (item.command === 'Videos') {
|
|
591
|
-
this.parent.notify(events.videoToolbarAction, {
|
|
592
|
-
member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
if (item.command === 'Links') {
|
|
596
|
-
this.parent.notify(events.linkToolbarAction, {
|
|
597
|
-
member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
598
|
-
});
|
|
599
|
-
}
|
|
600
|
-
if (item.command === 'Table') {
|
|
601
|
-
this.parent.notify(events.tableToolbarAction, {
|
|
602
|
-
member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
603
|
-
});
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
else {
|
|
607
|
-
var linkDialog = document.getElementById(this.parent.getID() + '_rtelink');
|
|
608
|
-
var imageDialog = document.getElementById(this.parent.getID() + '_image');
|
|
609
|
-
if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||
|
|
610
|
-
item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {
|
|
611
|
-
var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());
|
|
612
|
-
if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {
|
|
570
|
+
if (item.command !== 'FormatPainter') {
|
|
571
|
+
if (closestElement && !closestElement.classList.contains('e-rte-inline-popup')) {
|
|
572
|
+
if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||
|
|
573
|
+
item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {
|
|
574
|
+
if (isIDevice() && item.command === 'Images') {
|
|
575
|
+
this.nodeSelectionObj.restore();
|
|
576
|
+
}
|
|
577
|
+
var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());
|
|
613
578
|
save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());
|
|
579
|
+
selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);
|
|
580
|
+
selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);
|
|
614
581
|
}
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
}
|
|
618
|
-
switch (item.subCommand) {
|
|
619
|
-
case 'Maximize':
|
|
620
|
-
this.parent.notify(events.enableFullScreen, { args: args });
|
|
621
|
-
break;
|
|
622
|
-
case 'Minimize':
|
|
623
|
-
this.parent.notify(events.disableFullScreen, { args: args });
|
|
624
|
-
break;
|
|
625
|
-
case 'CreateLink':
|
|
626
|
-
this.parent.notify(events.insertLink, {
|
|
627
|
-
member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
628
|
-
});
|
|
629
|
-
break;
|
|
630
|
-
case 'RemoveLink':
|
|
631
|
-
this.parent.notify(events.unLink, {
|
|
632
|
-
member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
633
|
-
});
|
|
634
|
-
break;
|
|
635
|
-
case 'Print':
|
|
636
|
-
this.parent.print();
|
|
637
|
-
break;
|
|
638
|
-
case 'Image':
|
|
639
|
-
this.parent.notify(events.insertImage, {
|
|
582
|
+
if (item.command === 'Images') {
|
|
583
|
+
this.parent.notify(events.imageToolbarAction, {
|
|
640
584
|
member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
641
585
|
});
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
this.parent.notify(events.
|
|
586
|
+
}
|
|
587
|
+
if (item.command === 'Audios') {
|
|
588
|
+
this.parent.notify(events.audioToolbarAction, {
|
|
645
589
|
member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
646
590
|
});
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
this.parent.notify(events.
|
|
591
|
+
}
|
|
592
|
+
if (item.command === 'Videos') {
|
|
593
|
+
this.parent.notify(events.videoToolbarAction, {
|
|
650
594
|
member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
651
595
|
});
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
this.parent.notify(events.
|
|
655
|
-
member: '
|
|
596
|
+
}
|
|
597
|
+
if (item.command === 'Links') {
|
|
598
|
+
this.parent.notify(events.linkToolbarAction, {
|
|
599
|
+
member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
600
|
+
});
|
|
601
|
+
}
|
|
602
|
+
if (item.command === 'Table') {
|
|
603
|
+
this.parent.notify(events.tableToolbarAction, {
|
|
604
|
+
member: 'table', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
656
605
|
});
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
this.
|
|
669
|
-
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
else {
|
|
609
|
+
var linkDialog = document.getElementById(this.parent.getID() + '_rtelink');
|
|
610
|
+
var imageDialog = document.getElementById(this.parent.getID() + '_image');
|
|
611
|
+
if (!(item.subCommand === 'SourceCode' || item.subCommand === 'Preview' ||
|
|
612
|
+
item.subCommand === 'FontColor' || item.subCommand === 'BackgroundColor')) {
|
|
613
|
+
var range = this.nodeSelectionObj.getRange(this.parent.contentModule.getDocument());
|
|
614
|
+
if (isNullOrUndefined(linkDialog) && isNullOrUndefined(imageDialog)) {
|
|
615
|
+
save = this.nodeSelectionObj.save(range, this.parent.contentModule.getDocument());
|
|
616
|
+
}
|
|
617
|
+
selectNodeEle = this.nodeSelectionObj.getNodeCollection(range);
|
|
618
|
+
selectParentEle = this.nodeSelectionObj.getParentNodeCollection(range);
|
|
619
|
+
}
|
|
620
|
+
switch (item.subCommand) {
|
|
621
|
+
case 'Maximize':
|
|
622
|
+
this.parent.notify(events.enableFullScreen, { args: args });
|
|
623
|
+
break;
|
|
624
|
+
case 'Minimize':
|
|
625
|
+
this.parent.notify(events.disableFullScreen, { args: args });
|
|
626
|
+
break;
|
|
627
|
+
case 'CreateLink':
|
|
628
|
+
this.parent.notify(events.insertLink, {
|
|
629
|
+
member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
630
|
+
});
|
|
631
|
+
break;
|
|
632
|
+
case 'RemoveLink':
|
|
633
|
+
this.parent.notify(events.unLink, {
|
|
634
|
+
member: 'link', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
635
|
+
});
|
|
636
|
+
break;
|
|
637
|
+
case 'Print':
|
|
638
|
+
this.parent.print();
|
|
639
|
+
break;
|
|
640
|
+
case 'Image':
|
|
641
|
+
this.parent.notify(events.insertImage, {
|
|
642
|
+
member: 'image', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
643
|
+
});
|
|
644
|
+
break;
|
|
645
|
+
case 'Audio':
|
|
646
|
+
this.parent.notify(events.insertAudio, {
|
|
647
|
+
member: 'audio', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
648
|
+
});
|
|
649
|
+
break;
|
|
650
|
+
case 'Video':
|
|
651
|
+
this.parent.notify(events.insertVideo, {
|
|
652
|
+
member: 'video', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
653
|
+
});
|
|
654
|
+
break;
|
|
655
|
+
case 'CreateTable':
|
|
656
|
+
this.parent.notify(events.createTable, {
|
|
657
|
+
member: 'table', args: args, selection: save
|
|
658
|
+
});
|
|
659
|
+
break;
|
|
660
|
+
case 'SourceCode':
|
|
661
|
+
this.parent.notify(events.sourceCode, { member: 'viewSource', args: args });
|
|
662
|
+
break;
|
|
663
|
+
case 'Preview':
|
|
664
|
+
this.parent.notify(events.updateSource, { member: 'updateSource', args: args });
|
|
665
|
+
break;
|
|
666
|
+
case 'FontColor':
|
|
667
|
+
case 'BackgroundColor':
|
|
668
|
+
break;
|
|
669
|
+
case 'File':
|
|
670
|
+
this.parent.notify(events.renderFileManager, {
|
|
671
|
+
member: 'fileManager', args: args, selectNode: selectNodeEle, selection: save, selectParent: selectParentEle
|
|
672
|
+
});
|
|
673
|
+
break;
|
|
674
|
+
default:
|
|
675
|
+
this.parent.formatter.process(this.parent, args, args.originalEvent, null);
|
|
676
|
+
break;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
else {
|
|
681
|
+
if (args.originalEvent.detail === 1) {
|
|
682
|
+
clearTimeout(this.clickTimeout);
|
|
683
|
+
this.clickTimeout = setTimeout(function () {
|
|
684
|
+
_this.parent.notify(events.formatPainterClick, {
|
|
685
|
+
member: 'formatPainter', args: args
|
|
670
686
|
});
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
687
|
+
}, 200);
|
|
688
|
+
}
|
|
689
|
+
else {
|
|
690
|
+
clearTimeout(this.clickTimeout);
|
|
691
|
+
this.parent.notify(events.formatPainterDoubleClick, {
|
|
692
|
+
member: 'formatPainter', args: args
|
|
693
|
+
});
|
|
675
694
|
}
|
|
676
695
|
}
|
|
677
696
|
};
|
|
@@ -714,7 +733,8 @@ var HtmlEditor = /** @class */ (function () {
|
|
|
714
733
|
var formatterClass = new HTMLFormatter({
|
|
715
734
|
currentDocument: this.contentRenderer.getDocument(),
|
|
716
735
|
element: editElement,
|
|
717
|
-
options: option
|
|
736
|
+
options: option,
|
|
737
|
+
formatPainterSettings: this.parent.formatPainterSettings
|
|
718
738
|
});
|
|
719
739
|
this.parent.setProperties({ formatter: formatterClass }, true);
|
|
720
740
|
}
|
|
@@ -651,7 +651,7 @@ var PasteCleanup = /** @class */ (function () {
|
|
|
651
651
|
this.parent.formatter.editorManager.execCommand('inserthtml', 'pasteCleanup', args, function (returnArgs) {
|
|
652
652
|
extend(args, { elements: returnArgs.elements, imageElements: returnArgs.imgElem }, true);
|
|
653
653
|
_this.parent.formatter.onSuccess(_this.parent, args);
|
|
654
|
-
}, clipBoardElem);
|
|
654
|
+
}, clipBoardElem, null, null, this.parent.enterKey);
|
|
655
655
|
this.removeTempClass();
|
|
656
656
|
this.parent.notify(events.toolbarRefresh, {});
|
|
657
657
|
this.imgUploading(this.parent.inputElement);
|
|
@@ -721,7 +721,7 @@ var PasteCleanup = /** @class */ (function () {
|
|
|
721
721
|
this.parent.formatter.editorManager.execCommand('inserthtml', 'pasteCleanup', args, function (returnArgs) {
|
|
722
722
|
extend(args, { elements: returnArgs.elements, imageElements: returnArgs.imgElem }, true);
|
|
723
723
|
_this.parent.formatter.onSuccess(_this.parent, args);
|
|
724
|
-
}, clipBoardElem);
|
|
724
|
+
}, clipBoardElem, null, null, this.parent.enterKey);
|
|
725
725
|
this.removeTempClass();
|
|
726
726
|
}
|
|
727
727
|
else {
|
|
@@ -250,10 +250,17 @@ var QuickToolbar = /** @class */ (function () {
|
|
|
250
250
|
};
|
|
251
251
|
QuickToolbar.prototype.keyUpHandler = function (e) {
|
|
252
252
|
if (this.parent.inlineMode.enable && !Browser.isDevice) {
|
|
253
|
+
var args = e.args;
|
|
253
254
|
if (this.parent.inlineMode.onSelection) {
|
|
255
|
+
if (this.parent.getSelection().length > 0) {
|
|
256
|
+
if ((args.ctrlKey && args.keyCode === 65) || (args.shiftKey && (args.keyCode === 33 || args.keyCode === 34 ||
|
|
257
|
+
args.keyCode === 35 || args.keyCode === 36 || args.keyCode === 37 || args.keyCode === 38 ||
|
|
258
|
+
args.keyCode === 39 || args.keyCode === 40))) {
|
|
259
|
+
this.showInlineQTBar(this.offsetX, this.offsetY, args.target);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
254
262
|
return;
|
|
255
263
|
}
|
|
256
|
-
var args = e.args;
|
|
257
264
|
this.deBounce(this.offsetX, this.offsetY, args.target);
|
|
258
265
|
}
|
|
259
266
|
};
|
|
@@ -318,6 +318,7 @@ var Toolbar = /** @class */ (function () {
|
|
|
318
318
|
args.baseToolbar.toolbarObj.items[index].tooltipText = item.tooltip;
|
|
319
319
|
args.baseToolbar.toolbarObj.items[index].subCommand = item.subCommand;
|
|
320
320
|
args.baseToolbar.toolbarObj.dataBind();
|
|
321
|
+
args.baseToolbar.toolbarObj.refreshOverflow();
|
|
321
322
|
}
|
|
322
323
|
else {
|
|
323
324
|
this.addTBarItem(args, 0);
|
|
@@ -458,7 +459,11 @@ var Toolbar = /** @class */ (function () {
|
|
|
458
459
|
|
|
459
460
|
*/
|
|
460
461
|
Toolbar.prototype.refreshToolbarOverflow = function () {
|
|
462
|
+
this.parent.element.classList.remove(classes.CLS_RTL);
|
|
461
463
|
this.baseToolbar.toolbarObj.refreshOverflow();
|
|
464
|
+
if (this.parent.enableRtl) {
|
|
465
|
+
this.parent.element.classList.add(classes.CLS_RTL);
|
|
466
|
+
}
|
|
462
467
|
};
|
|
463
468
|
Toolbar.prototype.isToolbarDestroyed = function () {
|
|
464
469
|
return this.baseToolbar.toolbarObj && !this.baseToolbar.toolbarObj.isDestroyed;
|
|
@@ -557,6 +562,11 @@ var Toolbar = /** @class */ (function () {
|
|
|
557
562
|
Toolbar.prototype.toolbarClickHandler = function (e) {
|
|
558
563
|
var trg = closest(e.originalEvent.target, '.e-hor-nav');
|
|
559
564
|
if (trg && this.parent.toolbarSettings.type === ToolbarType.Expand && !isNOU(trg)) {
|
|
565
|
+
var extendedTbar = this.tbElement.querySelector('.e-toolbar-extended');
|
|
566
|
+
if (!isNOU(extendedTbar)) {
|
|
567
|
+
setStyleAttribute(extendedTbar, { maxHeight: '', display: 'block' });
|
|
568
|
+
setStyleAttribute(extendedTbar, { maxHeight: extendedTbar.offsetHeight + 'px', display: '' });
|
|
569
|
+
}
|
|
560
570
|
if (!trg.classList.contains('e-nav-active')) {
|
|
561
571
|
removeClass([this.tbElement], [classes.CLS_EXPAND_OPEN]);
|
|
562
572
|
this.parent.setContentHeight('toolbar', false);
|
|
@@ -714,6 +714,16 @@ export declare const bindCssClass: string;
|
|
|
714
714
|
/**
|
|
715
715
|
* @hidden
|
|
716
716
|
|
|
717
|
+
*/
|
|
718
|
+
export declare const formatPainterClick: string;
|
|
719
|
+
/**
|
|
720
|
+
* @hidden
|
|
721
|
+
|
|
722
|
+
*/
|
|
723
|
+
export declare const formatPainterDoubleClick: string;
|
|
724
|
+
/**
|
|
725
|
+
* @hidden
|
|
726
|
+
|
|
717
727
|
*/
|
|
718
728
|
export declare const blockEmptyNodes: string;
|
|
719
729
|
/**
|
|
@@ -714,6 +714,16 @@ export var bindCssClass = 'closeTableDialog';
|
|
|
714
714
|
/**
|
|
715
715
|
* @hidden
|
|
716
716
|
|
|
717
|
+
*/
|
|
718
|
+
export var formatPainterClick = 'formatPainterClick';
|
|
719
|
+
/**
|
|
720
|
+
* @hidden
|
|
721
|
+
|
|
722
|
+
*/
|
|
723
|
+
export var formatPainterDoubleClick = 'formatPainterDoubleClick';
|
|
724
|
+
/**
|
|
725
|
+
* @hidden
|
|
726
|
+
|
|
717
727
|
*/
|
|
718
728
|
export var blockEmptyNodes = "address:empty, article:empty, aside:empty, blockquote:empty,\n details:empty, dd:empty, div:empty, dl:empty, dt:empty, fieldset:empty, footer:empty,form:empty, h1:empty,\n h2:empty, h3:empty, h4:empty, h5:empty, h6:empty, header:empty, hgroup:empty, li:empty, main:empty, nav:empty,\n noscript:empty, output:empty, p:empty, pre:empty, section:empty, td:empty, th:empty";
|
|
719
729
|
/**
|
|
@@ -60,3 +60,7 @@ export declare enum DialogType {
|
|
|
60
60
|
* Defines types to be used to configure the toolbar items.
|
|
61
61
|
*/
|
|
62
62
|
export declare type ToolbarItems = 'alignments' | 'justifyLeft' | 'justifyCenter' | 'justifyRight' | 'justifyFull' | 'fontName' | 'fontSize' | 'fontColor' | 'backgroundColor' | 'bold' | 'italic' | 'underline' | 'strikeThrough' | 'clearFormat' | 'clearAll' | 'cut' | 'copy' | 'paste' | 'unorderedList' | 'orderedList' | 'indent' | 'outdent' | 'undo' | 'redo' | 'superScript' | 'subScript' | 'createLink' | 'openLink' | 'editLink' | 'image' | 'createTable' | 'removeTable' | 'replace' | 'align' | 'caption' | 'remove' | 'openImageLink' | 'editImageLink' | 'removeImageLink' | 'insertLink' | 'display' | 'altText' | 'dimension' | 'fullScreen' | 'maximize' | 'minimize' | 'lowerCase' | 'upperCase' | 'print' | 'formats' | 'sourceCode' | 'preview' | 'viewSide' | 'insertCode' | 'tableHeader' | 'tableRemove' | 'tableRows' | 'tableColumns' | 'tableCellBackground' | 'tableCellHorizontalAlign' | 'tableCellVerticalAlign' | 'tableEditProperties' | 'styles' | 'removeLink' | 'merge';
|
|
63
|
+
/**
|
|
64
|
+
* Defines the context or contexts in which styles will be copied
|
|
65
|
+
*/
|
|
66
|
+
export declare type FormatPainterContext = 'Text' | 'List' | 'Table';
|
|
@@ -10,7 +10,7 @@ import { BaseQuickToolbar } from '../actions/base-quick-toolbar';
|
|
|
10
10
|
import { NodeSelection } from '../../selection/selection';
|
|
11
11
|
import { EditorMode, EnterKey, ShiftEnterKey } from './../../common/types';
|
|
12
12
|
import { MarkdownSelection } from './../../markdown-parser/plugin/markdown-selection';
|
|
13
|
-
import { ToolbarSettingsModel, IFrameSettingsModel, ImageSettingsModel, AudioSettingsModel, VideoSettingsModel, TableSettingsModel } from '../models/models';
|
|
13
|
+
import { ToolbarSettingsModel, IFrameSettingsModel, ImageSettingsModel, AudioSettingsModel, VideoSettingsModel, TableSettingsModel, FormatPainterSettingsModel } from '../models/models';
|
|
14
14
|
import { QuickToolbarSettingsModel, InlineModeModel, PasteCleanupSettingsModel, FileManagerSettingsModel } from '../models/models';
|
|
15
15
|
import { Count } from '../actions/count';
|
|
16
16
|
import { ColorPicker, ColorPickerEventArgs, ColorPickerModel, FileInfo } from '@syncfusion/ej2-inputs';
|
|
@@ -36,6 +36,7 @@ import { Resize } from '../actions/resize';
|
|
|
36
36
|
import { FileManager } from '../actions/file-manager';
|
|
37
37
|
import { NodeCutter, DOMNode } from '../../editor-manager';
|
|
38
38
|
import { EnterKeyAction } from '../actions/enter-key';
|
|
39
|
+
import { FormatPainter } from '../actions/format-painter';
|
|
39
40
|
/**
|
|
40
41
|
* Specifies Rich Text Editor interfaces.
|
|
41
42
|
*
|
|
@@ -82,6 +83,17 @@ export interface IRichTextEditor extends Component<HTMLElement> {
|
|
|
82
83
|
fileManagerSettings: FileManagerSettingsModel;
|
|
83
84
|
tableSettings: TableSettingsModel;
|
|
84
85
|
pasteCleanupSettings: PasteCleanupSettingsModel;
|
|
86
|
+
/**
|
|
87
|
+
* Configure the format painter settings of the RTE.
|
|
88
|
+
*
|
|
89
|
+
* @default
|
|
90
|
+
* {
|
|
91
|
+
* allowedContext: ['Text', 'List', 'Table'],
|
|
92
|
+
* allowedFormats: 'b; em; font; sub; sup; kbd; i; s; u; code; strong; span; p; div; h1; h2; h3; h4; h5; h6; blockquote; table; thead; tbody; tr; td; th; ol; ul; li; pre;',
|
|
93
|
+
* deniedFormats: null
|
|
94
|
+
* }
|
|
95
|
+
*/
|
|
96
|
+
formatPainterSettings: FormatPainterSettingsModel;
|
|
85
97
|
floatingToolbarOffset?: number;
|
|
86
98
|
showCharCount?: boolean;
|
|
87
99
|
enableTabKey?: boolean;
|
|
@@ -98,6 +110,7 @@ export interface IRichTextEditor extends Component<HTMLElement> {
|
|
|
98
110
|
format?: IFormatProperties;
|
|
99
111
|
value?: string;
|
|
100
112
|
saveInterval?: number;
|
|
113
|
+
showTooltip?: boolean;
|
|
101
114
|
isBlur?: boolean;
|
|
102
115
|
isRTE?: boolean;
|
|
103
116
|
contentModule?: IRenderer;
|
|
@@ -130,6 +143,7 @@ export interface IRichTextEditor extends Component<HTMLElement> {
|
|
|
130
143
|
markdownEditorModule: MarkdownEditor;
|
|
131
144
|
htmlEditorModule: HtmlEditor;
|
|
132
145
|
countModule?: Count;
|
|
146
|
+
formatPainterModule?: FormatPainter;
|
|
133
147
|
serviceLocator?: ServiceLocator;
|
|
134
148
|
setEnable?(): void;
|
|
135
149
|
setReadOnly?(isInit?: boolean): void;
|
|
@@ -178,6 +192,7 @@ export interface IRichTextEditor extends Component<HTMLElement> {
|
|
|
178
192
|
getInsertVidMaxWidth?(): string | number;
|
|
179
193
|
getSelection(): string;
|
|
180
194
|
currentTarget: HTMLElement;
|
|
195
|
+
focusIn(): void;
|
|
181
196
|
}
|
|
182
197
|
/**
|
|
183
198
|
|
|
@@ -237,6 +252,7 @@ export interface NotifyArgs {
|
|
|
237
252
|
insertElement?: Element;
|
|
238
253
|
touchData?: ITouchData;
|
|
239
254
|
allowedStylePropertiesArray?: string[];
|
|
255
|
+
formatPainterSettings?: FormatPainterSettingsModel;
|
|
240
256
|
}
|
|
241
257
|
/**
|
|
242
258
|
* Provides information about the current and previous cssClass property .
|
|
@@ -475,6 +491,16 @@ export interface ITableCommandsArgs {
|
|
|
475
491
|
/** Defines the instance of the current selection */
|
|
476
492
|
selection?: NodeSelection;
|
|
477
493
|
}
|
|
494
|
+
/**
|
|
495
|
+
|
|
496
|
+
*/
|
|
497
|
+
export interface IFormatPainterArgs {
|
|
498
|
+
/**
|
|
499
|
+
* Defines the action to be performed.
|
|
500
|
+
* Allowed values are 'format-copy', 'format-paste', 'escape'.
|
|
501
|
+
*/
|
|
502
|
+
formatPainterAction: string;
|
|
503
|
+
}
|
|
478
504
|
/**
|
|
479
505
|
|
|
480
506
|
*/
|
|
@@ -496,7 +522,7 @@ export interface ITableArgs {
|
|
|
496
522
|
*/
|
|
497
523
|
export interface ITableNotifyArgs {
|
|
498
524
|
module?: string;
|
|
499
|
-
args?: ClickEventArgs | MouseEvent | KeyboardEventArgs;
|
|
525
|
+
args?: ClickEventArgs | MouseEvent | KeyboardEventArgs | TouchEvent;
|
|
500
526
|
selection?: NodeSelection;
|
|
501
527
|
selectNode?: Node[];
|
|
502
528
|
selectParent?: Node[];
|
|
@@ -843,6 +869,7 @@ export interface IHtmlFormatterModel {
|
|
|
843
869
|
options?: {
|
|
844
870
|
[key: string]: number;
|
|
845
871
|
};
|
|
872
|
+
formatPainterSettings?: FormatPainterSettingsModel;
|
|
846
873
|
}
|
|
847
874
|
/**
|
|
848
875
|
|
|
@@ -1275,7 +1302,7 @@ export declare const executeGroup: {
|
|
|
1275
1302
|
/**
|
|
1276
1303
|
* Defines types to be used as CommandName.
|
|
1277
1304
|
*/
|
|
1278
|
-
export declare type CommandName = 'bold' | 'italic' | 'underline' | 'strikeThrough' | 'superscript' | 'subscript' | 'uppercase' | 'lowercase' | 'fontColor' | 'fontName' | 'fontSize' | 'backColor' | 'justifyCenter' | 'justifyFull' | 'justifyLeft' | 'justifyRight' | 'undo' | 'createLink' | 'formatBlock' | 'heading' | 'indent' | 'insertHTML' | 'insertOrderedList' | 'insertUnorderedList' | 'insertParagraph' | 'outdent' | 'redo' | 'removeFormat' | 'insertText' | 'insertImage' | 'insertAudio' | 'insertVideo' | 'insertHorizontalRule' | 'insertBrOnReturn' | 'insertCode' | 'insertTable' | 'editImage' | 'editLink';
|
|
1305
|
+
export declare type CommandName = 'bold' | 'italic' | 'underline' | 'strikeThrough' | 'superscript' | 'subscript' | 'uppercase' | 'lowercase' | 'fontColor' | 'fontName' | 'fontSize' | 'backColor' | 'justifyCenter' | 'justifyFull' | 'justifyLeft' | 'justifyRight' | 'undo' | 'createLink' | 'formatBlock' | 'heading' | 'indent' | 'insertHTML' | 'insertOrderedList' | 'insertUnorderedList' | 'insertParagraph' | 'outdent' | 'redo' | 'removeFormat' | 'insertText' | 'insertImage' | 'insertAudio' | 'insertVideo' | 'insertHorizontalRule' | 'insertBrOnReturn' | 'insertCode' | 'insertTable' | 'editImage' | 'editLink' | 'applyFormatPainter' | 'copyFormatPainter' | 'escapeFormatPainter';
|
|
1279
1306
|
/**
|
|
1280
1307
|
* @hidden
|
|
1281
1308
|
|