@syncfusion/ej2-richtexteditor 25.1.35 → 25.1.38
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 +28 -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 +71 -50
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +71 -50
- 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 +10 -10
- package/src/editor-manager/plugin/dom-node.js +2 -1
- package/src/editor-manager/plugin/inserthtml.js +16 -19
- package/src/editor-manager/plugin/lists.js +31 -11
- package/src/editor-manager/plugin/ms-word-clean-up.js +2 -2
- package/src/editor-manager/plugin/selection-commands.js +4 -0
- package/src/rich-text-editor/actions/html-editor.js +0 -3
- package/src/rich-text-editor/actions/quick-toolbar.js +4 -0
- package/src/rich-text-editor/base/rich-text-editor.js +2 -4
- package/src/rich-text-editor/renderer/toolbar-renderer.js +10 -10
- package/styles/bootstrap-dark.css +14 -7
- package/styles/bootstrap.css +7 -3
- package/styles/bootstrap4.css +4 -0
- package/styles/bootstrap5-dark.css +4 -0
- package/styles/bootstrap5.css +4 -0
- package/styles/fabric-dark.css +4 -0
- package/styles/fabric.css +4 -0
- package/styles/fluent-dark.css +21 -5
- package/styles/fluent.css +21 -5
- package/styles/highcontrast-light.css +4 -0
- package/styles/highcontrast.css +4 -0
- package/styles/material-dark.css +5 -1
- package/styles/material.css +5 -1
- package/styles/material3-dark.css +4 -0
- package/styles/material3.css +4 -0
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +4 -4
- package/styles/rich-text-editor/_bootstrap-definition.scss +2 -2
- package/styles/rich-text-editor/_fluent-definition.scss +5 -5
- package/styles/rich-text-editor/_layout.scss +7 -7
- package/styles/rich-text-editor/_tailwind-definition.scss +5 -5
- package/styles/rich-text-editor/_theme.scss +21 -0
- package/styles/rich-text-editor/bootstrap-dark.css +14 -7
- package/styles/rich-text-editor/bootstrap.css +7 -3
- package/styles/rich-text-editor/bootstrap4.css +4 -0
- package/styles/rich-text-editor/bootstrap5-dark.css +4 -0
- package/styles/rich-text-editor/bootstrap5.css +4 -0
- package/styles/rich-text-editor/fabric-dark.css +4 -0
- package/styles/rich-text-editor/fabric.css +4 -0
- package/styles/rich-text-editor/fluent-dark.css +21 -5
- package/styles/rich-text-editor/fluent.css +21 -5
- package/styles/rich-text-editor/highcontrast-light.css +4 -0
- package/styles/rich-text-editor/highcontrast.css +4 -0
- package/styles/rich-text-editor/material-dark.css +5 -1
- package/styles/rich-text-editor/material.css +5 -1
- package/styles/rich-text-editor/material3-dark.css +4 -0
- package/styles/rich-text-editor/material3.css +4 -0
- package/styles/rich-text-editor/tailwind-dark.css +13 -13
- package/styles/rich-text-editor/tailwind.css +13 -13
- package/styles/tailwind-dark.css +13 -13
- package/styles/tailwind.css +13 -13
|
@@ -3945,9 +3945,11 @@ class ToolbarRenderer {
|
|
|
3945
3945
|
for (let index = 0; index < args.element.childNodes.length; index++) {
|
|
3946
3946
|
if (currentListStyle === args.element.childNodes[index].innerHTML.split(' ').join('').toLocaleLowerCase()) {
|
|
3947
3947
|
addClass([args.element.childNodes[index]], 'e-active');
|
|
3948
|
+
break;
|
|
3948
3949
|
}
|
|
3949
|
-
else if (currentListStyle === '') {
|
|
3950
|
+
else if (currentListStyle === '' && args.element.childNodes[index].innerHTML !== 'None') {
|
|
3950
3951
|
addClass([args.element.childNodes[index]], 'e-active');
|
|
3952
|
+
break;
|
|
3951
3953
|
}
|
|
3952
3954
|
}
|
|
3953
3955
|
}
|
|
@@ -4035,8 +4037,6 @@ class ToolbarRenderer {
|
|
|
4035
4037
|
target: colorPicker.element.parentElement, cssClass: css,
|
|
4036
4038
|
enablePersistence: this.parent.enablePersistence, enableRtl: this.parent.enableRtl,
|
|
4037
4039
|
beforeOpen: (dropDownArgs) => {
|
|
4038
|
-
colorPicker.inline = true;
|
|
4039
|
-
colorPicker.dataBind();
|
|
4040
4040
|
if (proxy.parent.readonly || !proxy.parent.enabled) {
|
|
4041
4041
|
dropDownArgs.cancel = true;
|
|
4042
4042
|
return;
|
|
@@ -4174,14 +4174,18 @@ class ToolbarRenderer {
|
|
|
4174
4174
|
const colorPicker = new ColorPicker({
|
|
4175
4175
|
enablePersistence: this.parent.enablePersistence,
|
|
4176
4176
|
enableRtl: this.parent.enableRtl,
|
|
4177
|
-
inline:
|
|
4178
|
-
value:
|
|
4177
|
+
inline: true,
|
|
4178
|
+
value: null,
|
|
4179
|
+
cssClass: ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass + ' ' + 'e-rte-picker-init',
|
|
4179
4180
|
created: () => {
|
|
4180
4181
|
const value = (item === 'backgroundcolor') ? proxy.parent.backgroundColor.default : proxy.parent.fontColor.default;
|
|
4181
|
-
colorPicker.
|
|
4182
|
+
colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
|
|
4183
|
+
colorPicker.value = value;
|
|
4182
4184
|
},
|
|
4183
4185
|
mode: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.mode : proxy.parent.fontColor.mode),
|
|
4184
4186
|
modeSwitcher: ((item === 'backgroundcolor') ? proxy.parent.backgroundColor.modeSwitcher : proxy.parent.fontColor.modeSwitcher),
|
|
4187
|
+
presetColors: (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode : this.parent.fontColor.colorCode,
|
|
4188
|
+
columns: (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns,
|
|
4185
4189
|
beforeTileRender: (args) => {
|
|
4186
4190
|
args.element.classList.add(CLS_COLOR_PALETTE);
|
|
4187
4191
|
args.element.classList.add(CLS_CUSTOM_TILE);
|
|
@@ -4226,10 +4230,6 @@ class ToolbarRenderer {
|
|
|
4226
4230
|
}
|
|
4227
4231
|
});
|
|
4228
4232
|
colorPicker.isStringTemplate = true;
|
|
4229
|
-
colorPicker.columns = (item === 'backgroundcolor') ? this.parent.backgroundColor.columns : this.parent.fontColor.columns;
|
|
4230
|
-
colorPicker.presetColors = (item === 'backgroundcolor') ? this.parent.backgroundColor.colorCode :
|
|
4231
|
-
this.parent.fontColor.colorCode;
|
|
4232
|
-
colorPicker.cssClass = ((item === 'backgroundcolor') ? CLS_BACKGROUND_COLOR_PICKER : CLS_FONT_COLOR_PICKER) + ' ' + args.cssClass;
|
|
4233
4233
|
colorPicker.createElement = this.parent.createElement;
|
|
4234
4234
|
colorPicker.appendTo(document.getElementById(args.target));
|
|
4235
4235
|
return colorPicker;
|
|
@@ -7067,6 +7067,10 @@ class QuickToolbar {
|
|
|
7067
7067
|
}
|
|
7068
7068
|
keyDownHandler(e) {
|
|
7069
7069
|
const preventHide = e.args.altKey;
|
|
7070
|
+
if (this.parent.inlineMode.enable && e.args.metaKey && e.args.keyCode === 65) {
|
|
7071
|
+
this.showInlineQTBar(this.offsetX, this.offsetY, e.args.target);
|
|
7072
|
+
return;
|
|
7073
|
+
}
|
|
7070
7074
|
if (!preventHide) {
|
|
7071
7075
|
if ((this.parent.inlineMode.enable && (!Browser.isDevice || isIDevice()))
|
|
7072
7076
|
&& !isNullOrUndefined(select('.' + CLS_INLINE_POP, document))) {
|
|
@@ -11857,7 +11861,8 @@ class DOMNode {
|
|
|
11857
11861
|
}
|
|
11858
11862
|
}
|
|
11859
11863
|
else {
|
|
11860
|
-
|
|
11864
|
+
let tagName = !isNullOrUndefined(start.parentElement) ? start.parentElement.tagName.toLocaleLowerCase() : '';
|
|
11865
|
+
if (start.tagName === 'IMG' && tagName !== 'p' && tagName !== 'div') {
|
|
11861
11866
|
const parNode = document.createElement('p');
|
|
11862
11867
|
start.parentElement.insertBefore(parNode, start);
|
|
11863
11868
|
parNode.appendChild(start);
|
|
@@ -12408,6 +12413,7 @@ class Lists {
|
|
|
12408
12413
|
endNode = endNode.nodeName === 'BR' ? endNode.parentElement : endNode;
|
|
12409
12414
|
startNode = startNode.nodeName !== 'LI' && !isNullOrUndefined(startNode.closest('LI')) ? startNode.closest('LI') : startNode;
|
|
12410
12415
|
endNode = endNode.nodeName !== 'LI' && endNode.nodeName !== '#text' && !isNullOrUndefined(endNode.closest('LI')) ? endNode.closest('LI') : endNode;
|
|
12416
|
+
const parentList = (range.startContainer.nodeName === '#text') ? range.startContainer.parentElement.closest('li') : range.startContainer.closest('li');
|
|
12411
12417
|
if (((range.commonAncestorContainer.nodeName === 'OL' || range.commonAncestorContainer.nodeName === 'UL' || range.commonAncestorContainer.nodeName === 'LI') &&
|
|
12412
12418
|
isNullOrUndefined(endNode.nextElementSibling) && endNode.textContent.length === range.endOffset &&
|
|
12413
12419
|
isNullOrUndefined(startNode.previousElementSibling) && range.startOffset === 0) ||
|
|
@@ -12424,6 +12430,12 @@ class Lists {
|
|
|
12424
12430
|
}
|
|
12425
12431
|
e.event.preventDefault();
|
|
12426
12432
|
}
|
|
12433
|
+
else if (!isNullOrUndefined(parentList) && parentList.textContent === range.startContainer.textContent && parentList.closest('li').previousElementSibling === null) {
|
|
12434
|
+
range.deleteContents();
|
|
12435
|
+
this.parent.editableElement.querySelectorAll('li:empty').forEach((e) => e.remove());
|
|
12436
|
+
this.parent.editableElement.querySelectorAll('ol:empty').forEach((e) => e.remove());
|
|
12437
|
+
e.event.preventDefault();
|
|
12438
|
+
}
|
|
12427
12439
|
}
|
|
12428
12440
|
onKeyUp() {
|
|
12429
12441
|
if (!isNullOrUndefined(this.commonLIParent) && !isNullOrUndefined(this.commonLIParent.querySelector('.removeList'))) {
|
|
@@ -12463,7 +12475,7 @@ class Lists {
|
|
|
12463
12475
|
if (e.event.which === 8) {
|
|
12464
12476
|
this.backspaceList(e);
|
|
12465
12477
|
}
|
|
12466
|
-
if (e.event.which === 46 && e.event.action === 'delete') {
|
|
12478
|
+
if ((e.event.which === 46 && e.event.action === 'delete') || (e.event.which === 88 && e.event.action === 'cut')) {
|
|
12467
12479
|
const range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
|
|
12468
12480
|
const commonAncestor = range.commonAncestorContainer;
|
|
12469
12481
|
const startEle = range.startContainer;
|
|
@@ -12935,8 +12947,17 @@ class Lists {
|
|
|
12935
12947
|
}
|
|
12936
12948
|
cleanNode() {
|
|
12937
12949
|
const liParents = this.parent.editableElement.querySelectorAll('ol + ol, ul + ul');
|
|
12950
|
+
let listStyleType;
|
|
12951
|
+
let firstNodeOL;
|
|
12938
12952
|
for (let c = 0; c < liParents.length; c++) {
|
|
12939
12953
|
const node = liParents[c];
|
|
12954
|
+
let toFindtopOlUl = true;
|
|
12955
|
+
if (toFindtopOlUl && (liParents[c].parentElement.parentElement.nodeName === 'OL' || liParents[c].parentElement.parentElement.nodeName === 'UL')) {
|
|
12956
|
+
toFindtopOlUl = false;
|
|
12957
|
+
const preElement = liParents[c].parentElement.parentElement;
|
|
12958
|
+
listStyleType = preElement.style.listStyleType;
|
|
12959
|
+
firstNodeOL = node.previousElementSibling;
|
|
12960
|
+
}
|
|
12940
12961
|
if (this.domNode.isList(node.previousElementSibling) &&
|
|
12941
12962
|
this.domNode.openTagString(node) === this.domNode.openTagString(node.previousElementSibling)) {
|
|
12942
12963
|
const contentNodes = this.domNode.contents(node);
|
|
@@ -12951,6 +12972,9 @@ class Lists {
|
|
|
12951
12972
|
}
|
|
12952
12973
|
}
|
|
12953
12974
|
}
|
|
12975
|
+
if (firstNodeOL) {
|
|
12976
|
+
firstNodeOL.style.listStyleType = listStyleType;
|
|
12977
|
+
}
|
|
12954
12978
|
}
|
|
12955
12979
|
findUnSelected(temp, elements) {
|
|
12956
12980
|
temp = temp.slice().reverse();
|
|
@@ -13040,18 +13064,19 @@ class Lists {
|
|
|
13040
13064
|
if (DEFAULT_TAG && 0 === element.querySelectorAll(BLOCK_TAGS.join(', ')).length) {
|
|
13041
13065
|
const wrapperclass = isNullOrUndefined(className) ? ' class="e-rte-wrap-inner"' :
|
|
13042
13066
|
' class="' + className + ' e-rte-wrap-inner"';
|
|
13043
|
-
|
|
13044
|
-
if (
|
|
13045
|
-
|
|
13046
|
-
|
|
13047
|
-
|
|
13048
|
-
|
|
13049
|
-
|
|
13050
|
-
|
|
13051
|
-
|
|
13067
|
+
const parentElement = parentNode;
|
|
13068
|
+
if (elements.length === parentElement.querySelectorAll('li').length) {
|
|
13069
|
+
if (!isNullOrUndefined(parentElement.style.listStyleType)) {
|
|
13070
|
+
parentNode.style.removeProperty('list-style-type');
|
|
13071
|
+
}
|
|
13072
|
+
if (!isNullOrUndefined(parentElement.style.listStyleImage)) {
|
|
13073
|
+
parentNode.style.removeProperty('list-style-image');
|
|
13074
|
+
}
|
|
13075
|
+
if (parentElement.style.length === 0) {
|
|
13076
|
+
parentNode.removeAttribute('style');
|
|
13077
|
+
}
|
|
13052
13078
|
}
|
|
13053
|
-
const wrapper = '<' + DEFAULT_TAG + wrapperclass +
|
|
13054
|
-
this.domNode.attributes(parentElement) + '></' + DEFAULT_TAG + '>';
|
|
13079
|
+
const wrapper = '<' + DEFAULT_TAG + wrapperclass + '></' + DEFAULT_TAG + '>';
|
|
13055
13080
|
if (e.enterAction !== 'BR') {
|
|
13056
13081
|
this.domNode.wrapInner(element, this.domNode.parseHTMLFragment(wrapper));
|
|
13057
13082
|
}
|
|
@@ -14004,25 +14029,22 @@ class InsertHtml {
|
|
|
14004
14029
|
TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) !== -1))
|
|
14005
14030
|
|| (node.nodeName.toLowerCase() === 'table' && closestParentNode &&
|
|
14006
14031
|
TABLE_BLOCK_TAGS.indexOf(closestParentNode.tagName.toLocaleLowerCase()) === -1))) {
|
|
14007
|
-
|
|
14008
|
-
|
|
14009
|
-
|
|
14010
|
-
|
|
14011
|
-
|
|
14012
|
-
|
|
14013
|
-
|
|
14014
|
-
|
|
14015
|
-
|
|
14016
|
-
|
|
14017
|
-
|
|
14018
|
-
|
|
14019
|
-
|
|
14020
|
-
|
|
14021
|
-
|
|
14022
|
-
|
|
14023
|
-
lasNode.textContent.length : lasNode.childNodes.length);
|
|
14024
|
-
range = nodeSelection.getRange(docElement);
|
|
14025
|
-
isSingleNode = false;
|
|
14032
|
+
preNode = nodeCutter.GetSpliceNode(range, closestParentNode);
|
|
14033
|
+
if (!isNullOrUndefined(preNode)) {
|
|
14034
|
+
sibNode = isNullOrUndefined(preNode.previousSibling) ? preNode.parentNode.previousSibling : preNode.previousSibling;
|
|
14035
|
+
if (nodes.length === 1) {
|
|
14036
|
+
nodeSelection.setSelectionContents(docElement, preNode);
|
|
14037
|
+
range = nodeSelection.getRange(docElement);
|
|
14038
|
+
isSingleNode = true;
|
|
14039
|
+
}
|
|
14040
|
+
else {
|
|
14041
|
+
lasNode = nodeCutter.GetSpliceNode(range, nodes[nodes.length - 1].parentElement);
|
|
14042
|
+
lasNode = isNullOrUndefined(lasNode) ? preNode : lasNode;
|
|
14043
|
+
nodeSelection.setSelectionText(docElement, preNode, lasNode, 0, (lasNode.nodeType === 3) ?
|
|
14044
|
+
lasNode.textContent.length : lasNode.childNodes.length);
|
|
14045
|
+
range = nodeSelection.getRange(docElement);
|
|
14046
|
+
isSingleNode = false;
|
|
14047
|
+
}
|
|
14026
14048
|
}
|
|
14027
14049
|
}
|
|
14028
14050
|
let containsBlockNode = false;
|
|
@@ -17147,11 +17169,15 @@ class SelectionCommands {
|
|
|
17147
17169
|
&& range.endOffset === range.startContainer.length)) {
|
|
17148
17170
|
const nodeIndex = [];
|
|
17149
17171
|
let cloneNode = nodes[index];
|
|
17172
|
+
const clonedElement = cloneNode;
|
|
17150
17173
|
do {
|
|
17151
17174
|
nodeIndex.push(domSelection.getIndex(cloneNode));
|
|
17152
17175
|
cloneNode = cloneNode.parentNode;
|
|
17153
17176
|
} while (cloneNode && (cloneNode !== formatNode));
|
|
17154
17177
|
if (nodes[index].nodeName !== 'BR') {
|
|
17178
|
+
if (clonedElement.nodeName === '#text' && clonedElement.textContent.includes('\u200B')) {
|
|
17179
|
+
clonedElement.remove();
|
|
17180
|
+
}
|
|
17155
17181
|
cloneNode = splitNode = (isCursor && (formatNode.textContent.length - 1) === range.startOffset) ?
|
|
17156
17182
|
nodeCutter.SplitNode(range, formatNode, true)
|
|
17157
17183
|
: nodeCutter.GetSpliceNode(range, formatNode);
|
|
@@ -18470,7 +18496,7 @@ class MsWordPaste {
|
|
|
18470
18496
|
'x', 'xi', 'xii', 'xiii', 'xiv', 'xv', 'xvi', 'xvii', 'xviii', 'xix', 'xx'];
|
|
18471
18497
|
this.lowerGreekNumber = ['α', 'β', 'γ', 'δ', 'ε', 'ζ', 'η', 'θ', 'ι', 'κ', 'λ',
|
|
18472
18498
|
'μ', 'ν', 'ξ', 'ο', 'π', 'ρ', 'σ', 'τ', 'υ', 'φ', 'χ', 'ψ', 'ω'];
|
|
18473
|
-
this.removableElements = ['o:p', 'style'];
|
|
18499
|
+
this.removableElements = ['o:p', 'style', 'w:sdt'];
|
|
18474
18500
|
this.listContents = [];
|
|
18475
18501
|
this.cropImageDimensions = [];
|
|
18476
18502
|
this.parent = parent;
|
|
@@ -18835,7 +18861,7 @@ class MsWordPaste {
|
|
|
18835
18861
|
let innerElement = elm.innerHTML;
|
|
18836
18862
|
for (let i = 0; i < this.removableElements.length; i++) {
|
|
18837
18863
|
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
18838
|
-
const regExpStartElem = new RegExp('<' + this.removableElements[i] + '
|
|
18864
|
+
const regExpStartElem = new RegExp('<' + this.removableElements[i] + '\\s*[^>]*>', 'g');
|
|
18839
18865
|
// eslint-disable-next-line security/detect-non-literal-regexp
|
|
18840
18866
|
const regExpEndElem = new RegExp('</' + this.removableElements[i] + '>', 'g');
|
|
18841
18867
|
innerElement = innerElement.replace(regExpStartElem, '');
|
|
@@ -21450,9 +21476,6 @@ class HtmlEditor {
|
|
|
21450
21476
|
}
|
|
21451
21477
|
onSelectionRestore(e) {
|
|
21452
21478
|
this.parent.isBlur = false;
|
|
21453
|
-
if (isNullOrUndefined(this.saveSelection) || isNullOrUndefined(closest(this.saveSelection.range.startContainer.parentElement, ".e-img-caption")) ? true : !(closest(this.saveSelection.range.startContainer.parentElement, ".e-img-caption").getAttribute("contenteditable") == "false")) {
|
|
21454
|
-
this.contentRenderer.getEditPanel().focus();
|
|
21455
|
-
}
|
|
21456
21479
|
if (isNullOrUndefined(e.items) || e.items) {
|
|
21457
21480
|
this.saveSelection.restore();
|
|
21458
21481
|
}
|
|
@@ -35883,9 +35906,7 @@ let RichTextEditor = class RichTextEditor extends Component {
|
|
|
35883
35906
|
}
|
|
35884
35907
|
else if (this.iframeSettings.enable) {
|
|
35885
35908
|
const iframeElement = this.element.querySelector('#' + this.getID() + '_rte-view');
|
|
35886
|
-
|
|
35887
|
-
this.setAutoHeight(iframeElement);
|
|
35888
|
-
}, 100);
|
|
35909
|
+
this.setAutoHeight(iframeElement);
|
|
35889
35910
|
this.inputElement.style.overflow = 'hidden';
|
|
35890
35911
|
}
|
|
35891
35912
|
}
|