@syncfusion/ej2-richtexteditor 26.2.5 → 26.2.8
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/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 +70 -21
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +70 -22
- 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 +9 -9
- package/src/editor-manager/plugin/inserthtml.d.ts +1 -0
- package/src/editor-manager/plugin/inserthtml.js +25 -12
- package/src/editor-manager/plugin/lists.d.ts +1 -0
- package/src/editor-manager/plugin/lists.js +18 -4
- package/src/rich-text-editor/actions/base-quick-toolbar.js +0 -1
- package/src/rich-text-editor/actions/html-editor.js +7 -0
- package/src/rich-text-editor/base/rich-text-editor.js +4 -4
- package/src/rich-text-editor/renderer/audio-module.js +1 -0
- package/src/rich-text-editor/renderer/image-module.js +1 -0
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +2 -0
- package/src/rich-text-editor/renderer/toolbar-renderer.js +14 -2
- package/src/rich-text-editor/renderer/video-module.js +1 -0
- package/styles/fluent2.css +5 -1033
- package/styles/material3-dark.css +1 -54
- package/styles/material3.css +3 -110
- package/styles/rich-text-editor/fluent2.css +5 -1033
- package/styles/rich-text-editor/material3-dark.css +1 -54
- package/styles/rich-text-editor/material3.css +3 -110
|
@@ -5428,11 +5428,11 @@ class ToolbarRenderer {
|
|
|
5428
5428
|
if (this.parent.showTooltip && args.type === 'toolbar') {
|
|
5429
5429
|
this.tooltip = new Tooltip({
|
|
5430
5430
|
target: '#' + this.parent.getID() + '_toolbar_wrapper [title]',
|
|
5431
|
-
container: this.toolbarPanel,
|
|
5432
5431
|
showTipPointer: true,
|
|
5433
5432
|
openDelay: 400,
|
|
5434
5433
|
opensOn: 'Hover',
|
|
5435
5434
|
beforeRender: this.tooltipBeforeRender.bind(this),
|
|
5435
|
+
beforeOpen: this.tooltipBeforeOpen.bind(this),
|
|
5436
5436
|
cssClass: this.parent.getCssClass(),
|
|
5437
5437
|
windowCollision: true,
|
|
5438
5438
|
position: 'BottomCenter'
|
|
@@ -5440,6 +5440,11 @@ class ToolbarRenderer {
|
|
|
5440
5440
|
this.tooltip.appendTo(args.target.parentElement);
|
|
5441
5441
|
}
|
|
5442
5442
|
}
|
|
5443
|
+
tooltipBeforeOpen(args) {
|
|
5444
|
+
if (args.element) {
|
|
5445
|
+
args.element.setAttribute('data-rte-id', this.parent.getID());
|
|
5446
|
+
}
|
|
5447
|
+
}
|
|
5443
5448
|
/**
|
|
5444
5449
|
* renderDropDownButton method
|
|
5445
5450
|
*
|
|
@@ -5981,6 +5986,13 @@ class ToolbarRenderer {
|
|
|
5981
5986
|
}
|
|
5982
5987
|
if (this.tooltip && !this.tooltip.isDestroyed) {
|
|
5983
5988
|
this.tooltip.destroy();
|
|
5989
|
+
const tooltipElements = document.querySelectorAll('[data-rte-id="' + this.parent.getID() + '"]');
|
|
5990
|
+
for (let i = 0; i < tooltipElements.length; i++) {
|
|
5991
|
+
const tooltipEle = tooltipElements[i];
|
|
5992
|
+
if (this.parent.getID() === tooltipEle.getAttribute('data-rte-id')) {
|
|
5993
|
+
detach(tooltipEle);
|
|
5994
|
+
}
|
|
5995
|
+
}
|
|
5984
5996
|
}
|
|
5985
5997
|
this.unWireEvent();
|
|
5986
5998
|
this.mode = null;
|
|
@@ -6797,6 +6809,7 @@ class Image$1 {
|
|
|
6797
6809
|
if (this.parent.insertImageSettings.resize) {
|
|
6798
6810
|
EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);
|
|
6799
6811
|
this.parent.element.ownerDocument.removeEventListener('mousedown', this.docClick, true);
|
|
6812
|
+
this.docClick = null;
|
|
6800
6813
|
EventHandler.remove(this.contentModule.getEditPanel(), 'cut', this.onCutHandler);
|
|
6801
6814
|
EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);
|
|
6802
6815
|
}
|
|
@@ -9145,6 +9158,7 @@ class Audio {
|
|
|
9145
9158
|
EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.touchStart);
|
|
9146
9159
|
EventHandler.remove(this.contentModule.getEditPanel(), Browser.touchEndEvent, this.audioClick);
|
|
9147
9160
|
this.parent.element.ownerDocument.removeEventListener('mousedown', this.docClick, true);
|
|
9161
|
+
this.docClick = null;
|
|
9148
9162
|
}
|
|
9149
9163
|
}
|
|
9150
9164
|
afterRender() {
|
|
@@ -10042,6 +10056,7 @@ class Video {
|
|
|
10042
10056
|
if (this.parent.insertVideoSettings.resize) {
|
|
10043
10057
|
EventHandler.remove(this.parent.contentModule.getEditPanel(), Browser.touchStartEvent, this.resizeStart);
|
|
10044
10058
|
this.parent.element.ownerDocument.removeEventListener('mousedown', this.docClick, true);
|
|
10059
|
+
this.docClick = null;
|
|
10045
10060
|
EventHandler.remove(this.contentModule.getEditPanel(), 'cut', this.onCutHandler);
|
|
10046
10061
|
EventHandler.remove(this.contentModule.getDocument(), Browser.touchMoveEvent, this.resizing);
|
|
10047
10062
|
}
|
|
@@ -16647,7 +16662,6 @@ class BaseQuickToolbar {
|
|
|
16647
16662
|
this.tooltip = new Tooltip({
|
|
16648
16663
|
target: '#' + this.element.id + ' [title]',
|
|
16649
16664
|
openDelay: 400,
|
|
16650
|
-
container: this.parent.rootContainer,
|
|
16651
16665
|
showTipPointer: true,
|
|
16652
16666
|
beforeRender: this.tooltipBeforeRender.bind(this),
|
|
16653
16667
|
windowCollision: true,
|
|
@@ -21930,13 +21944,15 @@ class Lists {
|
|
|
21930
21944
|
const commonAncestor = range.commonAncestorContainer;
|
|
21931
21945
|
const startEle = range.startContainer;
|
|
21932
21946
|
const endEle = range.endContainer;
|
|
21933
|
-
const startNode = startEle.nodeType === 3 ? startEle
|
|
21934
|
-
const endNode = endEle.nodeType === 3 ? endEle
|
|
21947
|
+
const startNode = startEle.nodeType === 3 ? this.domNode.blockParentNode(startEle) : startEle;
|
|
21948
|
+
const endNode = endEle.nodeType === 3 ? this.domNode.blockParentNode(endEle) : endEle;
|
|
21935
21949
|
if ((commonAncestor.nodeName === 'UL' || commonAncestor.nodeName === 'OL') && startNode !== endNode
|
|
21936
21950
|
&& (!isNullOrUndefined(closest(startNode, 'ul')) || !isNullOrUndefined(closest(startNode, 'ol')))
|
|
21937
21951
|
&& (!isNullOrUndefined(closest(endNode, 'ul')) || !isNullOrUndefined(closest(endNode, 'ol')))
|
|
21938
|
-
&& (commonAncestor.lastElementChild === closest(endNode, 'li')) && !range.collapsed) {
|
|
21939
|
-
|
|
21952
|
+
&& ((commonAncestor.lastElementChild === closest(endNode, 'li') && commonAncestor.lastChild !== endNode)) && !range.collapsed) {
|
|
21953
|
+
if (this.areAllListItemsSelected(commonAncestor, range)) {
|
|
21954
|
+
detach(commonAncestor);
|
|
21955
|
+
}
|
|
21940
21956
|
}
|
|
21941
21957
|
this.removeList(range, e);
|
|
21942
21958
|
}
|
|
@@ -22607,6 +22623,18 @@ class Lists {
|
|
|
22607
22623
|
this.domNode = null;
|
|
22608
22624
|
}
|
|
22609
22625
|
}
|
|
22626
|
+
areAllListItemsSelected(list, range) {
|
|
22627
|
+
const listItems = list.querySelectorAll('li');
|
|
22628
|
+
for (let i = 0; i < listItems.length; i++) {
|
|
22629
|
+
const listItem = listItems[i];
|
|
22630
|
+
const listItemRange = this.parent.currentDocument.createRange();
|
|
22631
|
+
listItemRange.selectNodeContents(listItem);
|
|
22632
|
+
if (!range.intersectsNode(listItem)) {
|
|
22633
|
+
return false;
|
|
22634
|
+
}
|
|
22635
|
+
}
|
|
22636
|
+
return true;
|
|
22637
|
+
}
|
|
22610
22638
|
}
|
|
22611
22639
|
|
|
22612
22640
|
/**
|
|
@@ -23679,6 +23707,9 @@ class InsertHtml {
|
|
|
23679
23707
|
const rangeElement = closest(nearestAnchor, 'span');
|
|
23680
23708
|
rangeElement.appendChild(tempSpan);
|
|
23681
23709
|
}
|
|
23710
|
+
else if (nodes[0].nodeName === '#text' && nodes[0].nodeValue.includes('\u200B') && !isNullOrUndefined(nodes[0].parentElement) && !isNullOrUndefined(nodes[0].parentElement.previousElementSibling) && nodes[0].parentElement.previousElementSibling.classList.contains('e-mention-chip')) {
|
|
23711
|
+
range.startContainer.parentElement.insertAdjacentElement('afterend', tempSpan);
|
|
23712
|
+
}
|
|
23682
23713
|
else {
|
|
23683
23714
|
range.insertNode(tempSpan);
|
|
23684
23715
|
}
|
|
@@ -23767,17 +23798,7 @@ class InsertHtml {
|
|
|
23767
23798
|
else {
|
|
23768
23799
|
this.cursorPos(lastSelectionNode, node, nodeSelection, docElement, editNode, enterAction);
|
|
23769
23800
|
}
|
|
23770
|
-
|
|
23771
|
-
if (spanAligns.length > 0) {
|
|
23772
|
-
spanAligns.forEach((spanAlign) => {
|
|
23773
|
-
if (!isNullOrUndefined(spanAlign)) {
|
|
23774
|
-
const blockAlign = this.getImmediateBlockNode(spanAlign, null);
|
|
23775
|
-
if (blockAlign && blockAlign.textContent.trim() === spanAlign.textContent.trim()) {
|
|
23776
|
-
blockAlign.style.textAlign = spanAlign.style.textAlign;
|
|
23777
|
-
}
|
|
23778
|
-
}
|
|
23779
|
-
});
|
|
23780
|
-
}
|
|
23801
|
+
this.alignCheck(editNode);
|
|
23781
23802
|
}
|
|
23782
23803
|
static placeCursorEnd(lastSelectionNode, node, nodeSelection, docElement, editNode) {
|
|
23783
23804
|
lastSelectionNode = lastSelectionNode.nodeName === 'BR' ? (isNullOrUndefined(lastSelectionNode.previousSibling) ? lastSelectionNode.parentNode
|
|
@@ -24017,6 +24038,27 @@ class InsertHtml {
|
|
|
24017
24038
|
}
|
|
24018
24039
|
insertNode.classList.add('ignore-table');
|
|
24019
24040
|
}
|
|
24041
|
+
static alignCheck(editNode) {
|
|
24042
|
+
const spanAligns = editNode.querySelectorAll('span[style*="text-align"]');
|
|
24043
|
+
for (let i = 0; i < spanAligns.length; i++) {
|
|
24044
|
+
const spanAlign = spanAligns[i];
|
|
24045
|
+
if (spanAlign) {
|
|
24046
|
+
const blockAlign = this.getImmediateBlockNode(spanAlign, null);
|
|
24047
|
+
if (blockAlign) {
|
|
24048
|
+
let totalSpanText = '';
|
|
24049
|
+
for (let j = 0; j < spanAligns.length; j++) {
|
|
24050
|
+
const span = spanAligns[j];
|
|
24051
|
+
if (blockAlign.contains(span)) {
|
|
24052
|
+
totalSpanText += span.textContent;
|
|
24053
|
+
}
|
|
24054
|
+
}
|
|
24055
|
+
if (blockAlign.textContent.trim() === totalSpanText.trim()) {
|
|
24056
|
+
blockAlign.style.textAlign = spanAlign.style.textAlign;
|
|
24057
|
+
}
|
|
24058
|
+
}
|
|
24059
|
+
}
|
|
24060
|
+
}
|
|
24061
|
+
}
|
|
24020
24062
|
}
|
|
24021
24063
|
/**
|
|
24022
24064
|
* Insert method
|
|
@@ -30795,6 +30837,13 @@ class HtmlEditor {
|
|
|
30795
30837
|
let isRootParent = false;
|
|
30796
30838
|
if (restrictKeys.indexOf(args.keyCode) < 0 && !args.shiftKey && !args.ctrlKey && !args.altKey && !isEmptyNode) {
|
|
30797
30839
|
pointer = range.startOffset;
|
|
30840
|
+
const container = range.startContainer;
|
|
30841
|
+
// Check if the container is a text node and contains a zero-width space
|
|
30842
|
+
if (container.nodeType === Node.TEXT_NODE && container.nodeValue.includes("\u200B")) {
|
|
30843
|
+
const beforeZeroWidthSpace = container.splitText(container.nodeValue.indexOf("\u200B"));
|
|
30844
|
+
beforeZeroWidthSpace.splitText(1); // The zero-width space is at the beginning of this node
|
|
30845
|
+
beforeZeroWidthSpace.parentNode.removeChild(beforeZeroWidthSpace);
|
|
30846
|
+
}
|
|
30798
30847
|
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
30799
30848
|
range.startContainer.nodeName === '#text' ? range.startContainer.parentElement !== this.parent.inputElement ? range.startContainer.parentElement.classList.add('currentStartMark')
|
|
30800
30849
|
: isRootParent = true : range.startContainer.classList.add('currentStartMark');
|
|
@@ -35964,8 +36013,6 @@ let RichTextEditor = class RichTextEditor extends Component {
|
|
|
35964
36013
|
*/
|
|
35965
36014
|
preRender() {
|
|
35966
36015
|
this.initializeValue();
|
|
35967
|
-
this.onBlurHandler = this.blurHandler.bind(this);
|
|
35968
|
-
this.onFocusHandler = this.focusHandler.bind(this);
|
|
35969
36016
|
this.clickPoints = { clientX: 0, clientY: 0 };
|
|
35970
36017
|
this.initialValue = this.value;
|
|
35971
36018
|
this.serviceLocator = new ServiceLocator;
|
|
@@ -36604,7 +36651,7 @@ let RichTextEditor = class RichTextEditor extends Component {
|
|
|
36604
36651
|
this.inputElement.innerHTML = this.enterKey !== 'BR' ? '<' + this.enterKey + '><br></' + this.enterKey + '>' : '<br>';
|
|
36605
36652
|
this.isSelectAll = false;
|
|
36606
36653
|
}
|
|
36607
|
-
if (selection.rangeCount > 0) {
|
|
36654
|
+
if (selection.rangeCount > 0 && this.contentModule.getDocument().activeElement.tagName !== 'INPUT' && this.inputElement.contains(this.contentModule.getDocument().activeElement)) {
|
|
36608
36655
|
selection.removeAllRanges();
|
|
36609
36656
|
selection.addRange(currentRange);
|
|
36610
36657
|
}
|
|
@@ -38208,6 +38255,9 @@ let RichTextEditor = class RichTextEditor extends Component {
|
|
|
38208
38255
|
}
|
|
38209
38256
|
}
|
|
38210
38257
|
wireEvents() {
|
|
38258
|
+
this.onResizeHandler = this.resizeHandler.bind(this);
|
|
38259
|
+
this.onBlurHandler = this.blurHandler.bind(this);
|
|
38260
|
+
this.onFocusHandler = this.focusHandler.bind(this);
|
|
38211
38261
|
this.element.addEventListener('focusin', this.onFocusHandler, true);
|
|
38212
38262
|
this.element.addEventListener('focusout', this.onBlurHandler, true);
|
|
38213
38263
|
this.on(contentChanged, this.contentChanged, this);
|
|
@@ -38263,7 +38313,6 @@ let RichTextEditor = class RichTextEditor extends Component {
|
|
|
38263
38313
|
EventHandler.add(this.inputElement, 'input', this.inputHandler, this);
|
|
38264
38314
|
this.wireContextEvent();
|
|
38265
38315
|
this.formatter.editorManager.observer.on(KEY_DOWN_HANDLER, this.editorKeyDown, this);
|
|
38266
|
-
this.onResizeHandler = this.resizeHandler.bind(this);
|
|
38267
38316
|
this.element.ownerDocument.defaultView.addEventListener('resize', this.onResizeHandler, true);
|
|
38268
38317
|
if (this.iframeSettings.enable) {
|
|
38269
38318
|
EventHandler.add(this.inputElement, 'focusin', this.focusHandler, this);
|