@syncfusion/ej2-richtexteditor 23.2.7-52849 → 24.1.41-569421
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +260 -0
- package/CHANGELOG.md +203 -1
- package/dist/ej2-richtexteditor.umd.min.js +1 -1
- package/dist/ej2-richtexteditor.umd.min.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es2015.js +9873 -7941
- package/dist/es6/ej2-richtexteditor.es2015.js.map +1 -1
- package/dist/es6/ej2-richtexteditor.es5.js +9967 -8034
- package/dist/es6/ej2-richtexteditor.es5.js.map +1 -1
- package/package.json +13 -13
- package/src/common/config.d.ts +7 -0
- package/src/common/config.js +12 -1
- package/src/common/constant.d.ts +6 -0
- package/src/common/constant.js +6 -0
- package/src/common/interface.d.ts +12 -0
- package/src/common/types.d.ts +6 -0
- package/src/common/util.d.ts +6 -0
- package/src/common/util.js +61 -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/audio.js +13 -3
- package/src/editor-manager/plugin/dom-node.d.ts +5 -1
- package/src/editor-manager/plugin/dom-node.js +169 -28
- package/src/editor-manager/plugin/format-painter-actions.d.ts +1 -0
- package/src/editor-manager/plugin/format-painter-actions.js +19 -1
- package/src/editor-manager/plugin/formats.d.ts +1 -0
- package/src/editor-manager/plugin/formats.js +38 -3
- package/src/editor-manager/plugin/image.js +38 -15
- package/src/editor-manager/plugin/indents.js +1 -1
- package/src/editor-manager/plugin/inserthtml.d.ts +1 -0
- package/src/editor-manager/plugin/inserthtml.js +83 -20
- package/src/editor-manager/plugin/link.js +8 -3
- package/src/editor-manager/plugin/lists.js +159 -70
- package/src/editor-manager/plugin/ms-word-clean-up.d.ts +3 -0
- package/src/editor-manager/plugin/ms-word-clean-up.js +215 -85
- package/src/editor-manager/plugin/nodecutter.js +5 -2
- package/src/editor-manager/plugin/selection-commands.d.ts +2 -0
- package/src/editor-manager/plugin/selection-commands.js +248 -4
- package/src/editor-manager/plugin/table.d.ts +4 -1
- package/src/editor-manager/plugin/table.js +95 -49
- package/src/editor-manager/plugin/toolbar-status.d.ts +2 -2
- package/src/editor-manager/plugin/toolbar-status.js +20 -10
- 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.d.ts +4 -3
- package/src/rich-text-editor/actions/base-quick-toolbar.js +61 -14
- package/src/rich-text-editor/actions/base-toolbar.js +33 -34
- package/src/rich-text-editor/actions/color-picker.d.ts +1 -0
- package/src/rich-text-editor/actions/color-picker.js +13 -3
- package/src/rich-text-editor/actions/count.js +1 -1
- package/src/rich-text-editor/actions/dropdown-buttons.d.ts +1 -0
- package/src/rich-text-editor/actions/dropdown-buttons.js +11 -5
- package/src/rich-text-editor/actions/emoji-picker.js +16 -7
- package/src/rich-text-editor/actions/enter-key.js +10 -5
- package/src/rich-text-editor/actions/file-manager.js +1 -1
- package/src/rich-text-editor/actions/format-painter.js +5 -2
- package/src/rich-text-editor/actions/full-screen.js +5 -4
- package/src/rich-text-editor/actions/html-editor.d.ts +2 -0
- package/src/rich-text-editor/actions/html-editor.js +124 -17
- package/src/rich-text-editor/actions/keyboard.js +3 -1
- package/src/rich-text-editor/actions/markdown-editor.js +3 -1
- package/src/rich-text-editor/actions/paste-clean-up.d.ts +5 -0
- package/src/rich-text-editor/actions/paste-clean-up.js +156 -28
- package/src/rich-text-editor/actions/quick-toolbar.d.ts +8 -0
- package/src/rich-text-editor/actions/quick-toolbar.js +59 -12
- package/src/rich-text-editor/actions/resize.js +2 -1
- package/src/rich-text-editor/actions/toolbar-action.js +1 -1
- package/src/rich-text-editor/actions/toolbar.d.ts +3 -3
- package/src/rich-text-editor/actions/toolbar.js +35 -96
- package/src/rich-text-editor/base/classes.d.ts +5 -5
- package/src/rich-text-editor/base/classes.js +5 -5
- package/src/rich-text-editor/base/constant.d.ts +46 -1
- package/src/rich-text-editor/base/constant.js +215 -1
- package/src/rich-text-editor/base/interface.d.ts +47 -3
- package/src/rich-text-editor/base/rich-text-editor-model.d.ts +3 -3
- package/src/rich-text-editor/base/rich-text-editor.d.ts +16 -4
- package/src/rich-text-editor/base/rich-text-editor.js +184 -97
- package/src/rich-text-editor/base/util.js +22 -4
- package/src/rich-text-editor/formatter/formatter.js +16 -4
- package/src/rich-text-editor/models/default-locale.js +31 -25
- package/src/rich-text-editor/models/items.js +3 -3
- package/src/rich-text-editor/models/toolbar-settings-model.d.ts +1 -1
- package/src/rich-text-editor/models/toolbar-settings.d.ts +1 -1
- package/src/rich-text-editor/models/toolbar-settings.js +1 -1
- package/src/rich-text-editor/renderer/audio-module.d.ts +1 -0
- package/src/rich-text-editor/renderer/audio-module.js +22 -4
- package/src/rich-text-editor/renderer/dialog-renderer.d.ts +2 -0
- package/src/rich-text-editor/renderer/dialog-renderer.js +22 -2
- package/src/rich-text-editor/renderer/iframe-content-renderer.js +2 -1
- package/src/rich-text-editor/renderer/image-module.d.ts +9 -1
- package/src/rich-text-editor/renderer/image-module.js +248 -213
- package/src/rich-text-editor/renderer/link-module.js +53 -24
- package/src/rich-text-editor/renderer/table-module.d.ts +10 -1
- package/src/rich-text-editor/renderer/table-module.js +343 -168
- package/src/rich-text-editor/renderer/toolbar-renderer.d.ts +3 -6
- package/src/rich-text-editor/renderer/toolbar-renderer.js +106 -101
- package/src/rich-text-editor/renderer/video-module.d.ts +3 -0
- package/src/rich-text-editor/renderer/video-module.js +82 -41
- package/src/rich-text-editor/renderer/view-source.d.ts +1 -0
- package/src/rich-text-editor/renderer/view-source.js +15 -5
- package/src/selection/selection.js +3 -0
- package/styles/bootstrap-dark.css +353 -103
- package/styles/bootstrap.css +357 -112
- package/styles/bootstrap4.css +338 -96
- package/styles/bootstrap5-dark.css +344 -97
- package/styles/bootstrap5.css +344 -97
- package/styles/fabric-dark.css +332 -90
- package/styles/fabric.css +333 -91
- package/styles/fluent-dark.css +360 -98
- package/styles/fluent.css +360 -98
- package/styles/highcontrast-light.css +332 -90
- package/styles/highcontrast.css +336 -91
- package/styles/material-dark.css +339 -92
- package/styles/material.css +339 -92
- package/styles/material3-dark.css +348 -100
- package/styles/material3.css +348 -100
- package/styles/rich-text-editor/_bds-definition.scss +279 -0
- package/styles/rich-text-editor/_bootstrap-dark-definition.scss +17 -13
- package/styles/rich-text-editor/_bootstrap-definition.scss +22 -19
- package/styles/rich-text-editor/_bootstrap4-definition.scss +11 -7
- package/styles/rich-text-editor/_bootstrap5-definition.scss +8 -4
- package/styles/rich-text-editor/_fabric-dark-definition.scss +6 -2
- package/styles/rich-text-editor/_fabric-definition.scss +7 -3
- package/styles/rich-text-editor/_fluent-definition.scss +14 -10
- package/styles/rich-text-editor/_fusionnew-definition.scss +7 -3
- package/styles/rich-text-editor/_highcontrast-definition.scss +7 -3
- package/styles/rich-text-editor/_highcontrast-light-definition.scss +6 -2
- package/styles/rich-text-editor/_layout.scss +211 -34
- package/styles/rich-text-editor/_material-dark-definition.scss +6 -2
- package/styles/rich-text-editor/_material-definition.scss +6 -2
- package/styles/rich-text-editor/_material3-definition.scss +16 -12
- package/styles/rich-text-editor/_tailwind-definition.scss +23 -19
- package/styles/rich-text-editor/_theme.scss +113 -24
- package/styles/rich-text-editor/bootstrap-dark.css +353 -103
- package/styles/rich-text-editor/bootstrap.css +357 -112
- package/styles/rich-text-editor/bootstrap4.css +338 -96
- package/styles/rich-text-editor/bootstrap5-dark.css +344 -97
- package/styles/rich-text-editor/bootstrap5.css +344 -97
- package/styles/rich-text-editor/fabric-dark.css +332 -90
- package/styles/rich-text-editor/fabric.css +333 -91
- package/styles/rich-text-editor/fluent-dark.css +360 -98
- package/styles/rich-text-editor/fluent.css +360 -98
- package/styles/rich-text-editor/highcontrast-light.css +332 -90
- package/styles/rich-text-editor/highcontrast.css +336 -91
- package/styles/rich-text-editor/icons/_bds.scss +348 -0
- package/styles/rich-text-editor/icons/_bootstrap-dark.scss +4 -4
- package/styles/rich-text-editor/icons/_bootstrap.scss +4 -4
- package/styles/rich-text-editor/icons/_bootstrap4.scss +4 -4
- package/styles/rich-text-editor/icons/_bootstrap5.scss +4 -4
- package/styles/rich-text-editor/icons/_fabric-dark.scss +4 -4
- package/styles/rich-text-editor/icons/_fabric.scss +4 -4
- package/styles/rich-text-editor/icons/_fluent.scss +4 -4
- package/styles/rich-text-editor/icons/_fusionnew.scss +3 -3
- package/styles/rich-text-editor/icons/_highcontrast-light.scss +4 -4
- package/styles/rich-text-editor/icons/_highcontrast.scss +4 -4
- package/styles/rich-text-editor/icons/_material-dark.scss +4 -4
- package/styles/rich-text-editor/icons/_material.scss +4 -4
- package/styles/rich-text-editor/icons/_material3.scss +4 -4
- package/styles/rich-text-editor/icons/_tailwind.scss +4 -4
- package/styles/rich-text-editor/material-dark.css +339 -92
- package/styles/rich-text-editor/material.css +339 -92
- package/styles/rich-text-editor/material3-dark.css +348 -100
- package/styles/rich-text-editor/material3.css +348 -100
- package/styles/rich-text-editor/tailwind-dark.css +383 -113
- package/styles/rich-text-editor/tailwind.css +383 -113
- package/styles/tailwind-dark.css +383 -113
- package/styles/tailwind.css +383 -113
- package/.github/PULL_REQUEST_TEMPLATE/Bug.md +0 -41
- package/.github/PULL_REQUEST_TEMPLATE/Feature.md +0 -27
|
@@ -451,19 +451,6 @@ var DOMNode = /** @class */ (function () {
|
|
|
451
451
|
var end = this.parent.querySelector('.' + markerClassName.endSelection);
|
|
452
452
|
var startTextNode;
|
|
453
453
|
var endTextNode;
|
|
454
|
-
if (start.textContent === '' && isNOU(end) && action !== 'tab') {
|
|
455
|
-
// To Do Apply Heading and Back space press in empty content.
|
|
456
|
-
// if (isNOU(action) && save.range.startContainer.nodeType === 1 &&
|
|
457
|
-
// (save.range.startContainer as HTMLElement).querySelectorAll('audio,video,image').length === 0) {
|
|
458
|
-
// start.innerHTML = '<br>';
|
|
459
|
-
// }
|
|
460
|
-
if (start.childNodes.length === 1 && start.childNodes[0].nodeName === 'BR') {
|
|
461
|
-
start.innerHTML = '<br>';
|
|
462
|
-
}
|
|
463
|
-
else {
|
|
464
|
-
start.innerHTML = '';
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
454
|
if (this.hasClass(start, markerClassName.startSelection) && start.classList.length > 1) {
|
|
468
455
|
var replace = this.createTagString(CONSTANT.DEFAULT_TAG, start, this.encode(start.textContent));
|
|
469
456
|
this.replaceWith(start, replace);
|
|
@@ -503,9 +490,11 @@ var DOMNode = /** @class */ (function () {
|
|
|
503
490
|
var range = save.range;
|
|
504
491
|
var startChildNodes = range.startContainer.childNodes;
|
|
505
492
|
var isTableStart = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'TABLE';
|
|
493
|
+
var isImgOnlySelected = startChildNodes.length > 1 && startChildNodes[0].nodeName === 'IMAGE' &&
|
|
494
|
+
range.endOffset === 1 && range.endContainer.nodeName === '#text' && range.endContainer.textContent.length === 0;
|
|
506
495
|
var start = ((isTableStart ? getLastTextNode(startChildNodes[range.startOffset + 1]) :
|
|
507
496
|
startChildNodes[(range.startOffset > 0) ? (range.startOffset - 1) : range.startOffset]) || range.startContainer);
|
|
508
|
-
var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (range.endOffset - 1) : range.endOffset]
|
|
497
|
+
var end = (range.endContainer.childNodes[(range.endOffset > 0) ? (isImgOnlySelected ? range.endOffset : (range.endOffset - 1)) : range.endOffset]
|
|
509
498
|
|| range.endContainer);
|
|
510
499
|
if ((start.nodeType === Node.ELEMENT_NODE && end.nodeType === Node.ELEMENT_NODE) && (start.contains(end) || end.contains(start))) {
|
|
511
500
|
var existNode = start.contains(end) ? start : end;
|
|
@@ -586,10 +575,13 @@ var DOMNode = /** @class */ (function () {
|
|
|
586
575
|
else if (start.tagName === 'BR') {
|
|
587
576
|
this.replaceWith(start, this.marker(className, this.encode(start.textContent)));
|
|
588
577
|
var markerStart = range.startContainer.querySelector('.' + className);
|
|
589
|
-
markerStart
|
|
578
|
+
if (markerStart) {
|
|
579
|
+
markerStart.parentElement.appendChild(start);
|
|
580
|
+
}
|
|
590
581
|
}
|
|
591
582
|
else {
|
|
592
|
-
|
|
583
|
+
var tagName = !isNOU(start.parentElement) ? start.parentElement.tagName.toLocaleLowerCase() : '';
|
|
584
|
+
if (start.tagName === 'IMG' && tagName !== 'p' && tagName !== 'div') {
|
|
593
585
|
var parNode = document.createElement('p');
|
|
594
586
|
start.parentElement.insertBefore(parNode, start);
|
|
595
587
|
parNode.appendChild(start);
|
|
@@ -679,11 +671,12 @@ var DOMNode = /** @class */ (function () {
|
|
|
679
671
|
/**
|
|
680
672
|
* blockNodes method
|
|
681
673
|
*
|
|
674
|
+
* @param {boolean} action - Optional Boolean that specifies the action is whether performed.
|
|
682
675
|
* @returns {Node[]} - returns the node array values
|
|
683
676
|
* @hidden
|
|
684
677
|
* @deprecated
|
|
685
678
|
*/
|
|
686
|
-
DOMNode.prototype.blockNodes = function () {
|
|
679
|
+
DOMNode.prototype.blockNodes = function (action) {
|
|
687
680
|
var collectionNodes = [];
|
|
688
681
|
var selection = this.getSelection();
|
|
689
682
|
if (this.isEditorArea() && selection.rangeCount) {
|
|
@@ -697,23 +690,46 @@ var DOMNode = /** @class */ (function () {
|
|
|
697
690
|
collectionNodes.push(startNode);
|
|
698
691
|
}
|
|
699
692
|
parentNode = this.blockParentNode(startNode);
|
|
693
|
+
var endParentNode = this.blockParentNode(endNode);
|
|
700
694
|
if (parentNode && collectionNodes.indexOf(parentNode) < 0) {
|
|
701
|
-
if (
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
695
|
+
if (!isNOU(action) && action) {
|
|
696
|
+
if (range.commonAncestorContainer.nodeName === 'TD' || parentNode.nodeName === 'TD' || endParentNode.nodeName === 'TD') {
|
|
697
|
+
var processedNodes = this.getPreBlockNodeCollection(range);
|
|
698
|
+
if (processedNodes.length > 1) {
|
|
699
|
+
this.wrapWithBlockNode(processedNodes, collectionNodes);
|
|
700
|
+
}
|
|
701
|
+
else if (processedNodes.length > 0) {
|
|
702
|
+
if (startNode !== endNode && startNode.nodeName !== 'BR') {
|
|
703
|
+
collectionNodes.push(this.createTempNode(startNode));
|
|
704
|
+
}
|
|
705
|
+
else if (startNode === endNode && startNode.nodeName === 'SPAN' && (startNode.classList.contains(markerClassName.startSelection)
|
|
706
|
+
|| startNode.classList.contains(markerClassName.endSelection))) {
|
|
707
|
+
collectionNodes.push(this.createTempNode(startNode));
|
|
708
|
+
}
|
|
709
|
+
}
|
|
710
710
|
}
|
|
711
711
|
else {
|
|
712
|
-
collectionNodes.push(
|
|
712
|
+
collectionNodes.push(parentNode);
|
|
713
713
|
}
|
|
714
714
|
}
|
|
715
715
|
else {
|
|
716
|
-
|
|
716
|
+
if (CONSTANT.IGNORE_BLOCK_TAGS.indexOf(parentNode.tagName.toLocaleLowerCase()) >= 0 && (startNode.tagName === 'BR' ||
|
|
717
|
+
startNode.nodeType === Node.TEXT_NODE ||
|
|
718
|
+
startNode.classList.contains(markerClassName.startSelection) ||
|
|
719
|
+
startNode.classList.contains(markerClassName.endSelection))) {
|
|
720
|
+
var tempNode = startNode.previousSibling &&
|
|
721
|
+
startNode.previousSibling.nodeType === Node.TEXT_NODE ?
|
|
722
|
+
startNode.previousSibling : startNode;
|
|
723
|
+
if (!startNode.nextSibling && !startNode.previousSibling && startNode.tagName === 'BR') {
|
|
724
|
+
collectionNodes.push(tempNode);
|
|
725
|
+
}
|
|
726
|
+
else {
|
|
727
|
+
collectionNodes.push(this.createTempNode(tempNode));
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
collectionNodes.push(parentNode);
|
|
732
|
+
}
|
|
717
733
|
}
|
|
718
734
|
}
|
|
719
735
|
var nodes = [];
|
|
@@ -782,6 +798,131 @@ var DOMNode = /** @class */ (function () {
|
|
|
782
798
|
DOMNode.prototype.ignoreTableTag = function (element) {
|
|
783
799
|
return !(CONSTANT.TABLE_BLOCK_TAGS.indexOf(element.tagName.toLocaleLowerCase()) >= 0);
|
|
784
800
|
};
|
|
801
|
+
DOMNode.prototype.getPreBlockNodeCollection = function (range) {
|
|
802
|
+
var startNode = this.getSelectedNode(range.startContainer, range.startOffset);
|
|
803
|
+
var endNode = this.getSelectedNode(range.endContainer, range.endOffset);
|
|
804
|
+
var nodes = [];
|
|
805
|
+
var rootNode = startNode.closest('td, th');
|
|
806
|
+
if (isNOU(rootNode)) {
|
|
807
|
+
return nodes;
|
|
808
|
+
}
|
|
809
|
+
var rootChildNode = Array.from(rootNode.childNodes);
|
|
810
|
+
var isContinue = true;
|
|
811
|
+
var processedStart = this.getClosestInlineParent(startNode, rootNode, true);
|
|
812
|
+
var processedEnd = this.getClosestInlineParent(endNode, rootNode, false);
|
|
813
|
+
for (var i = 0; i < rootChildNode.length; i++) {
|
|
814
|
+
var child = rootChildNode[i];
|
|
815
|
+
if (processedStart === processedEnd && child === processedStart) {
|
|
816
|
+
nodes.push(child);
|
|
817
|
+
isContinue = true;
|
|
818
|
+
}
|
|
819
|
+
else if (child === processedStart) {
|
|
820
|
+
isContinue = false;
|
|
821
|
+
}
|
|
822
|
+
else if (child === processedEnd) {
|
|
823
|
+
nodes.push(child); // Early Exit so Push the end node.
|
|
824
|
+
isContinue = true;
|
|
825
|
+
}
|
|
826
|
+
if (isContinue) {
|
|
827
|
+
continue;
|
|
828
|
+
}
|
|
829
|
+
else {
|
|
830
|
+
nodes.push(child);
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
return nodes;
|
|
834
|
+
};
|
|
835
|
+
DOMNode.prototype.getClosestInlineParent = function (node, rootNode, isStart) {
|
|
836
|
+
// 1. If the node is a text node, return the node
|
|
837
|
+
// 2. If the node is a block node return block node
|
|
838
|
+
// 3. If the node is a inline node,
|
|
839
|
+
// Traverse back untill the TD or TH node
|
|
840
|
+
// Check if the the previous sibling , next sibling is a block node.
|
|
841
|
+
// If yes return the inline node that is closest to the block node.
|
|
842
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
843
|
+
return node;
|
|
844
|
+
}
|
|
845
|
+
if (this.isBlockNode(node)) {
|
|
846
|
+
return node;
|
|
847
|
+
}
|
|
848
|
+
var currentNode = node;
|
|
849
|
+
var rootFlag = false;
|
|
850
|
+
while (currentNode) {
|
|
851
|
+
var previousNode = currentNode;
|
|
852
|
+
if (rootFlag) {
|
|
853
|
+
if (this.isBlockNode(currentNode)) {
|
|
854
|
+
return previousNode;
|
|
855
|
+
}
|
|
856
|
+
if (isStart && currentNode.previousSibling) {
|
|
857
|
+
if (this.isBlockNode(currentNode.previousSibling) || currentNode.previousSibling.nodeName === 'BR') {
|
|
858
|
+
return previousNode;
|
|
859
|
+
}
|
|
860
|
+
else {
|
|
861
|
+
currentNode = currentNode.previousSibling;
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
else if (!isStart && currentNode.nextSibling) {
|
|
865
|
+
if (this.isBlockNode(currentNode.nextSibling) || currentNode.nextSibling.nodeName === 'BR') {
|
|
866
|
+
return previousNode;
|
|
867
|
+
}
|
|
868
|
+
else {
|
|
869
|
+
currentNode = currentNode.nextSibling;
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
else {
|
|
873
|
+
return currentNode;
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
else {
|
|
877
|
+
currentNode = currentNode.parentElement;
|
|
878
|
+
if (currentNode === rootNode) {
|
|
879
|
+
currentNode = previousNode;
|
|
880
|
+
rootFlag = true;
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
return null;
|
|
885
|
+
};
|
|
886
|
+
DOMNode.prototype.wrapWithBlockNode = function (nodes, collectionNodes) {
|
|
887
|
+
var wrapperElement = createElement('p');
|
|
888
|
+
for (var i = 0; i < nodes.length; i++) {
|
|
889
|
+
var child = nodes[i];
|
|
890
|
+
if (child.nodeName === 'BR') {
|
|
891
|
+
child.parentNode.insertBefore(wrapperElement, child);
|
|
892
|
+
wrapperElement.appendChild(child);
|
|
893
|
+
if (wrapperElement.childNodes.length > 0) {
|
|
894
|
+
collectionNodes.push(wrapperElement);
|
|
895
|
+
}
|
|
896
|
+
wrapperElement = createElement('p');
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
if (!this.isBlockNode(child)) {
|
|
900
|
+
if (child.nodeName === '#text' && child.textContent.trim() === '') {
|
|
901
|
+
continue;
|
|
902
|
+
}
|
|
903
|
+
if (wrapperElement.childElementCount === 0) {
|
|
904
|
+
child.parentNode.insertBefore(wrapperElement, child);
|
|
905
|
+
wrapperElement.appendChild(child);
|
|
906
|
+
}
|
|
907
|
+
else {
|
|
908
|
+
wrapperElement.appendChild(child);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
else {
|
|
912
|
+
collectionNodes.push(child);
|
|
913
|
+
}
|
|
914
|
+
// Use case when the BR is next sibling but the BR is not the part of selection.
|
|
915
|
+
if ((i === nodes.length - 1) && wrapperElement.nextElementSibling &&
|
|
916
|
+
wrapperElement.querySelectorAll('br').length === 0 &&
|
|
917
|
+
wrapperElement.nextElementSibling.nodeName === 'BR') {
|
|
918
|
+
wrapperElement.appendChild(wrapperElement.nextElementSibling);
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
if (wrapperElement.childNodes.length > 0 && collectionNodes.indexOf(wrapperElement) < 0) {
|
|
923
|
+
collectionNodes.push(wrapperElement);
|
|
924
|
+
}
|
|
925
|
+
};
|
|
785
926
|
return DOMNode;
|
|
786
927
|
}());
|
|
787
928
|
export { DOMNode };
|
|
@@ -35,6 +35,7 @@ export declare class FormatPainterActions implements IFormatPainterEditor {
|
|
|
35
35
|
private validateELementTag;
|
|
36
36
|
private findCurrentContext;
|
|
37
37
|
private insertFormatNode;
|
|
38
|
+
private isListCopied;
|
|
38
39
|
private insertBlockNode;
|
|
39
40
|
private insertNewList;
|
|
40
41
|
private insertSameList;
|
|
@@ -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);
|
|
@@ -363,6 +363,14 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
363
363
|
var range = this.parent.nodeSelection.getRange(docElement);
|
|
364
364
|
var isCollapsed = range.collapsed;
|
|
365
365
|
var blockNodes = this.parent.domNode.blockNodes();
|
|
366
|
+
var isListCopied = this.isListCopied();
|
|
367
|
+
if (isListCopied) {
|
|
368
|
+
for (var i = 0; i < blockNodes.length; i++) {
|
|
369
|
+
if (closest(blockNodes[i], 'li')) {
|
|
370
|
+
blockNodes[i] = closest(blockNodes[i], 'li');
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
366
374
|
var isFullNodeSelected = false;
|
|
367
375
|
if (blockNodes.length === 1) {
|
|
368
376
|
isFullNodeSelected = blockNodes[0].textContent.trim() === range.toString().trim();
|
|
@@ -371,6 +379,16 @@ var FormatPainterActions = /** @class */ (function () {
|
|
|
371
379
|
this.insertBlockNode(clonedElem, range, docElement, blockNodes);
|
|
372
380
|
}
|
|
373
381
|
};
|
|
382
|
+
FormatPainterActions.prototype.isListCopied = function () {
|
|
383
|
+
var isListCopied = false;
|
|
384
|
+
for (var i = 0; i < this.copyCollection.length; i++) {
|
|
385
|
+
if (this.copyCollection[i].tagName === 'OL' || this.copyCollection[i].tagName === 'UL') {
|
|
386
|
+
isListCopied = true;
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return isListCopied;
|
|
391
|
+
};
|
|
374
392
|
FormatPainterActions.prototype.insertBlockNode = function (element, range, docElement, nodes) {
|
|
375
393
|
var domSelection = this.parent.nodeSelection;
|
|
376
394
|
var saveSelection = domSelection.save(range, docElement);
|
|
@@ -52,6 +52,14 @@ var Formats = /** @class */ (function () {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
|
+
Formats.prototype.getBlockParent = function (node, endNode) {
|
|
56
|
+
var currentParent;
|
|
57
|
+
while (node != endNode) {
|
|
58
|
+
currentParent = node;
|
|
59
|
+
node = node.parentElement;
|
|
60
|
+
}
|
|
61
|
+
return currentParent;
|
|
62
|
+
};
|
|
55
63
|
Formats.prototype.onKeyDown = function (e) {
|
|
56
64
|
if (e.event.which === 13) {
|
|
57
65
|
var range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
|
|
@@ -61,6 +69,8 @@ var Formats = /** @class */ (function () {
|
|
|
61
69
|
? range.endContainer : range.endContainer.parentElement;
|
|
62
70
|
var preElem = closest(startCon, 'pre');
|
|
63
71
|
var endPreElem = closest(endCon, 'pre');
|
|
72
|
+
var blockquoteEle = closest(startCon, 'blockquote');
|
|
73
|
+
var endBlockquoteEle = closest(endCon, 'blockquote');
|
|
64
74
|
var liParent = !isNOU(preElem) && !isNOU(preElem.parentElement) && preElem.parentElement.tagName === 'LI';
|
|
65
75
|
if (liParent) {
|
|
66
76
|
return;
|
|
@@ -72,6 +82,17 @@ var Formats = /** @class */ (function () {
|
|
|
72
82
|
range = this.parent.nodeSelection.getRange(this.parent.currentDocument);
|
|
73
83
|
this.parent.nodeSelection.setCursorPoint(this.parent.currentDocument, endCon, 0);
|
|
74
84
|
}
|
|
85
|
+
if (e.event.which === 13 && ((!isNOU(blockquoteEle) && !isNOU(endBlockquoteEle)) || (!isNOU(blockquoteEle) && isNOU(endBlockquoteEle)))) {
|
|
86
|
+
var startParent = this.getBlockParent(range.startContainer, blockquoteEle);
|
|
87
|
+
if ((startParent.textContent.charCodeAt(0) === 8203 &&
|
|
88
|
+
startParent.textContent.length === 1) || startParent.textContent.length === 0) {
|
|
89
|
+
if (isNOU(startParent.nextSibling) && ((startParent.previousSibling.textContent.charCodeAt(0) === 8203 &&
|
|
90
|
+
startParent.previousSibling.textContent.length === 1) || startParent.previousSibling.textContent.length === 0)) {
|
|
91
|
+
e.event.preventDefault();
|
|
92
|
+
this.paraFocus(startParent.parentElement); //Revert from blockquotes while pressing enter key
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
75
96
|
if (e.event.which === 13 && !isNOU(preElem) && !isNOU(endPreElem)) {
|
|
76
97
|
e.event.preventDefault();
|
|
77
98
|
this.deleteContent(range);
|
|
@@ -221,7 +242,7 @@ var Formats = /** @class */ (function () {
|
|
|
221
242
|
}
|
|
222
243
|
var save = this.parent.nodeSelection.save(range, this.parent.currentDocument);
|
|
223
244
|
this.parent.domNode.setMarker(save);
|
|
224
|
-
var formatsNodes = this.parent.domNode.blockNodes();
|
|
245
|
+
var formatsNodes = this.parent.domNode.blockNodes(true);
|
|
225
246
|
if (e.enterAction === 'BR') {
|
|
226
247
|
this.setSelectionBRConfig();
|
|
227
248
|
var allSelectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument);
|
|
@@ -295,7 +316,7 @@ var Formats = /** @class */ (function () {
|
|
|
295
316
|
replaceHTML = parentNode.innerHTML;
|
|
296
317
|
}
|
|
297
318
|
if ((e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&
|
|
298
|
-
(e.subCommand.toLowerCase() !== 'pre' ||
|
|
319
|
+
(e.subCommand.toLowerCase() !== 'pre' && e.subCommand.toLowerCase() !== 'blockquote' ||
|
|
299
320
|
(!isNOU(e.exeValue) && e.exeValue.name === 'dropDownSelect'))) ||
|
|
300
321
|
isNOU(parentNode.parentNode) ||
|
|
301
322
|
(parentNode.tagName === 'TABLE' && e.subCommand.toLowerCase() === 'pre')) {
|
|
@@ -304,7 +325,21 @@ var Formats = /** @class */ (function () {
|
|
|
304
325
|
this.cleanFormats(parentNode, e.subCommand);
|
|
305
326
|
var replaceNode = (e.subCommand.toLowerCase() === 'pre' && parentNode.tagName.toLowerCase() === 'pre') ?
|
|
306
327
|
'p' : e.subCommand;
|
|
307
|
-
var
|
|
328
|
+
var isToggleBlockquoteList = e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase() &&
|
|
329
|
+
e.subCommand.toLowerCase() === 'blockquote' && this.parent.domNode.isList(parentNode.firstElementChild);
|
|
330
|
+
var isToggleBlockquote = e.subCommand.toLowerCase() === parentNode.tagName.toLowerCase()
|
|
331
|
+
&& e.subCommand.toLowerCase() === 'blockquote';
|
|
332
|
+
var replaceTag = void 0;
|
|
333
|
+
if (isToggleBlockquoteList) {
|
|
334
|
+
replaceTag = replaceHTML.replace(/>\s+</g, '><');
|
|
335
|
+
}
|
|
336
|
+
else if (isToggleBlockquote) {
|
|
337
|
+
var tagWrap = (e.enterAction == 'BR' || e.enterAction == 'P') ? 'P' : e.enterAction;
|
|
338
|
+
replaceTag = this.parent.domNode.createTagString(tagWrap, parentNode, replaceHTML.replace(/>\s+</g, '><'));
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
replaceTag = this.parent.domNode.createTagString(replaceNode, parentNode, replaceHTML.replace(/>\s+</g, '><'));
|
|
342
|
+
}
|
|
308
343
|
if (parentNode.tagName === 'LI') {
|
|
309
344
|
parentNode.innerHTML = '';
|
|
310
345
|
parentNode.insertAdjacentHTML('beforeend', replaceTag);
|
|
@@ -79,13 +79,12 @@ var ImageCommand = /** @class */ (function () {
|
|
|
79
79
|
}
|
|
80
80
|
};
|
|
81
81
|
ImageCommand.prototype.createImage = function (e) {
|
|
82
|
-
var _this = this;
|
|
83
82
|
var isReplaced = false;
|
|
84
83
|
e.item.url = isNOU(e.item.url) || e.item.url === 'undefined' ? e.item.src : e.item.url;
|
|
85
84
|
if (!isNOU(e.item.selectParent) && e.item.selectParent[0].tagName === 'IMG') {
|
|
86
85
|
var imgEle = e.item.selectParent[0];
|
|
87
|
-
this.setStyle(imgEle, e);
|
|
88
86
|
isReplaced = true;
|
|
87
|
+
this.setStyle(imgEle, e, isReplaced);
|
|
89
88
|
}
|
|
90
89
|
else {
|
|
91
90
|
var imgElement = createElement('img');
|
|
@@ -109,24 +108,43 @@ var ImageCommand = /** @class */ (function () {
|
|
|
109
108
|
var selectedNode = this.parent.nodeSelection.getSelectedNodes(this.parent.currentDocument)[0];
|
|
110
109
|
var imgElm_1 = (e.value === 'Replace' || isReplaced) ? e.item.selectParent[0] :
|
|
111
110
|
(Browser.isIE ? selectedNode.previousSibling : selectedNode.previousElementSibling);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
111
|
+
var imageInstance_1 = this;
|
|
112
|
+
var onImageLoadEvent_1 = function () {
|
|
113
|
+
e.callBack({
|
|
114
|
+
requestType: (e.value === 'Replace') ? (e.item.subCommand = 'Replace', "Replace") : 'Images',
|
|
115
|
+
editorMode: 'HTML',
|
|
116
|
+
event: e.event,
|
|
117
|
+
range: imageInstance_1.parent.nodeSelection.getRange(imageInstance_1.parent.currentDocument),
|
|
118
|
+
elements: [imgElm_1]
|
|
119
|
+
});
|
|
120
|
+
imgElm_1.removeEventListener('load', onImageLoadEvent_1);
|
|
121
|
+
};
|
|
122
|
+
imgElm_1.addEventListener('load', onImageLoadEvent_1);
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
|
-
ImageCommand.prototype.setStyle = function (imgElement, e) {
|
|
125
|
+
ImageCommand.prototype.setStyle = function (imgElement, e, imgReplace) {
|
|
126
126
|
if (!isNOU(e.item.url)) {
|
|
127
127
|
imgElement.setAttribute('src', e.item.url);
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
var alignClassName;
|
|
130
|
+
if (imgReplace) {
|
|
131
|
+
var alignClass = {
|
|
132
|
+
'e-imgcenter': 'e-imgcenter',
|
|
133
|
+
'e-imgright': 'e-imgright',
|
|
134
|
+
'e-imgleft': 'e-imgleft'
|
|
135
|
+
};
|
|
136
|
+
var imgClassList = imgElement.classList;
|
|
137
|
+
var classArray = [];
|
|
138
|
+
for (var i = 0; i < imgClassList.length; i++) {
|
|
139
|
+
// eslint-disable-next-line
|
|
140
|
+
if (!isNOU(alignClass[imgClassList[i]])) {
|
|
141
|
+
// eslint-disable-next-line
|
|
142
|
+
alignClassName = alignClass[imgClassList[i]];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
imgElement.setAttribute('class', 'e-rte-image' + (isNOU(e.item.cssClass) ? '' : ' ' + e.item.cssClass)
|
|
147
|
+
+ (isNOU(alignClassName) ? '' : ' ' + alignClassName));
|
|
130
148
|
if (!isNOU(e.item.altText)) {
|
|
131
149
|
imgElement.setAttribute('alt', e.item.altText);
|
|
132
150
|
}
|
|
@@ -178,6 +196,9 @@ var ImageCommand = /** @class */ (function () {
|
|
|
178
196
|
if (!isNOU(e.item.target)) {
|
|
179
197
|
anchor.setAttribute('target', e.item.target);
|
|
180
198
|
}
|
|
199
|
+
if (!isNOU(e.item.ariaLabel)) {
|
|
200
|
+
anchor.setAttribute('aria-label', e.item.ariaLabel);
|
|
201
|
+
}
|
|
181
202
|
InsertHtml.Insert(this.parent.currentDocument, anchor, this.parent.editableElement);
|
|
182
203
|
this.callBack(e);
|
|
183
204
|
};
|
|
@@ -209,9 +230,11 @@ var ImageCommand = /** @class */ (function () {
|
|
|
209
230
|
e.item.selectNode[0].parentElement.href = e.item.url;
|
|
210
231
|
if (isNOU(e.item.target)) {
|
|
211
232
|
e.item.selectNode[0].parentElement.removeAttribute('target');
|
|
233
|
+
e.item.selectNode[0].parentElement.removeAttribute('aria-label');
|
|
212
234
|
}
|
|
213
235
|
else {
|
|
214
236
|
e.item.selectNode[0].parentElement.target = e.item.target;
|
|
237
|
+
e.item.selectNode[0].parentElement.ariaLabel = e.item.ariaLabel;
|
|
215
238
|
}
|
|
216
239
|
this.callBack(e);
|
|
217
240
|
};
|
|
@@ -81,7 +81,7 @@ var Indents = /** @class */ (function () {
|
|
|
81
81
|
isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);
|
|
82
82
|
}
|
|
83
83
|
else {
|
|
84
|
-
indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';
|
|
84
|
+
indentsValue = (marginLeftOrRight === '' || marginLeftOrRight === '0px' || marginLeftOrRight === '0in') ? '' : parseInt(marginLeftOrRight, null) - this.indentValue + 'px';
|
|
85
85
|
isRtl ? (parentNode.style.marginRight = indentsValue) : (parentNode.style.marginLeft = indentsValue);
|
|
86
86
|
/* eslint-enable */
|
|
87
87
|
}
|