@syncfusion/ej2-richtexteditor
Version:
Essential JS 2 RichTextEditor component
577 lines (576 loc) • 66.4 kB
JavaScript
import { isNullOrUndefined as isNOU, detach, Browser } from '@syncfusion/ej2-base';
import * as events from '../base/constant';
/**
* `EnterKey` module is used to handle enter key press actions.
*/
var EnterKeyAction = /** @class */ (function () {
function EnterKeyAction(parent) {
this.parent = parent;
this.addEventListener();
}
EnterKeyAction.prototype.addEventListener = function () {
this.parent.on(events.enterHandler, this.enterHandler, this);
this.parent.on(events.destroy, this.destroy, this);
};
EnterKeyAction.prototype.destroy = function () {
if (isNOU(this.parent)) {
return;
}
this.removeEventListener();
};
EnterKeyAction.prototype.removeEventListener = function () {
this.parent.off(events.enterHandler, this.enterHandler);
this.parent.off(events.destroy, this.destroy);
};
EnterKeyAction.prototype.getRangeNode = function () {
this.range = this.parent.getRange();
this.startNode = this.range.startContainer.nodeName === '#text' ? this.range.startContainer.parentElement :
this.range.startContainer;
this.endNode = this.range.endContainer.nodeName === '#text' ? this.range.endContainer.parentElement :
this.range.endContainer;
};
EnterKeyAction.prototype.enterHandler = function (e) {
var _this = this;
this.getRangeNode();
var isTableEnter = true;
this.formatTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote'];
var tableImagCursor = this.processedTableImageCursor();
if (!isNOU(this.parent.codeBlockModule)) {
var codeBlockPasteAction = (this.parent.formatter.editorManager.codeBlockObj
.isValidCodeBlockStructure(this.range.startContainer) ||
this.parent.formatter.editorManager.codeBlockObj.isValidCodeBlockStructure(this.range.endContainer));
if (!isNOU(codeBlockPasteAction)) {
this.parent.notify(events.codeBlockEnter, e);
return;
}
}
if (tableImagCursor.start || tableImagCursor.end) {
if (tableImagCursor.startName === 'TABLE' || tableImagCursor.endName === 'TABLE') { // Default browser action prevented and hanled manually.
this.handleCursorAtTableSide(e, tableImagCursor.start, tableImagCursor.end);
return;
}
}
if (tableImagCursor.start || tableImagCursor.end || this.range.startContainer.nodeName === 'IMG') {
if (this.parent.enterKey === 'BR' && (tableImagCursor.startName === 'IMG' || tableImagCursor.endName === 'IMG' || this.range.startContainer.nodeName === 'IMG')) { // Default browser action prevented and hanled manually.
this.handleEnterKeyAtImageSide(e, tableImagCursor.start, tableImagCursor.end);
return;
}
}
if (!isNOU(this.startNode.closest('TABLE')) && !isNOU(this.endNode.closest('TABLE'))) {
isTableEnter = false;
var curElement = this.startNode;
var blockElement = curElement;
while (!this.parent.formatter.editorManager.domNode.isBlockNode(curElement)) {
curElement = curElement.parentElement;
blockElement = curElement;
}
isTableEnter = blockElement.tagName === 'TH' || blockElement.tagName === 'TD' || blockElement.tagName === 'TBODY' ? false : true;
}
var eventArgs = e.args;
if (eventArgs.which === 13 && !eventArgs.ctrlKey && (!Browser.isDevice ? (eventArgs.code === 'Enter' || eventArgs.code === 'NumpadEnter') : eventArgs.key === 'Enter')) {
if (isNOU(this.startNode.closest('LI, UL, OL')) && isNOU(this.endNode.closest('LI, UL, OL')) &&
isNOU(this.startNode.closest('.e-img-inner')) && isTableEnter &&
isNOU(this.startNode.closest('PRE')) && isNOU(this.endNode.closest('PRE')) &&
isNOU(this.startNode.closest('BLOCKQUOTE')) && isNOU(this.endNode.closest('BLOCKQUOTE'))) {
var shiftKey_1 = e.args.shiftKey;
var actionBeginArgs = {
cancel: false,
name: events.actionBegin,
requestType: shiftKey_1 ? 'ShiftEnterAction' : 'EnterAction',
originalEvent: e.args
};
this.parent.trigger(events.actionBegin, actionBeginArgs, function (actionBeginArgs) {
if (!actionBeginArgs.cancel) {
if (_this.parent.formatter.getUndoRedoStack().length === 0) {
_this.parent.formatter.saveData();
}
if (!(_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.range.endContainer)) {
if (_this.range.startContainer.nodeType === Node.TEXT_NODE || !((_this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.querySelector('img')) ||
_this.range.startContainer.nodeName === 'SPAN' && (_this.range.startContainer.classList.contains('e-video-wrap') ||
_this.range.startContainer.classList.contains('e-audio-wrap')))) {
_this.range.deleteContents();
}
if (_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.length === 0 &&
_this.range.startContainer.parentElement !== _this.parent.inputElement) {
if (_this.parent.enterKey === 'BR') {
_this.range.startContainer.parentElement.innerHTML = '​';
}
else {
_this.range.startContainer.parentElement.innerHTML = '<br>';
}
}
else if (_this.range.startContainer === _this.parent.inputElement && _this.range.startContainer.innerHTML === '') {
if (_this.parent.enterKey === 'P') {
_this.range.startContainer.innerHTML = '<p><br></p>';
}
else if (_this.parent.enterKey === 'DIV') {
_this.range.startContainer.innerHTML = '<div><br></div>';
}
else {
_this.range.startContainer.innerHTML = '<br>';
}
var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);
}
else if (_this.parent.inputElement === _this.range.startContainer) {
var focusElem = _this.range.startContainer.childNodes[_this.range.startOffset];
if (focusElem.nodeName === '#text' && focusElem.textContent.length === 0) {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length === 0 ? 0 : focusElem.previousSibling.textContent.length);
}
else {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, focusElem.textContent.length >= 0 ? 0 : 1);
if (focusElem.previousSibling.textContent.length === 0) {
detach(focusElem.previousSibling);
if (!shiftKey_1) {
var currentFocusElem = !isNOU(focusElem.lastChild) ? focusElem.lastChild : focusElem;
while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' && currentFocusElem.nodeName !== 'BR') {
currentFocusElem = currentFocusElem.lastChild;
}
if (currentFocusElem.nodeName !== 'BR' && currentFocusElem.parentElement.textContent.length === 0 && currentFocusElem.parentElement.innerHTML.length === 0 &&
currentFocusElem.parentElement.nodeName !== 'BR') {
currentFocusElem.parentElement.appendChild(_this.parent.createElement('BR'));
}
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem.nodeName === 'BR' ? currentFocusElem : currentFocusElem.parentElement, currentFocusElem.parentElement.textContent.length >= 0 || currentFocusElem.nodeName === 'BR' ? 0 : 1);
}
}
else if (focusElem.textContent.length === 0) {
var currentFocusElem = focusElem.previousSibling.nodeName === '#text' ? focusElem.previousSibling : focusElem.previousSibling.lastChild;
while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
currentFocusElem = currentFocusElem.lastChild;
}
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentFocusElem, currentFocusElem.textContent.length);
detach(focusElem);
}
else if (_this.parent.enterKey !== 'BR' &&
focusElem.previousSibling.textContent.length !== 0 && focusElem.textContent.length !== 0) {
e.args.preventDefault();
return;
}
}
_this.getRangeNode();
}
}
if (_this.range.startContainer === _this.range.endContainer &&
_this.range.startOffset === _this.range.endOffset && _this.range.startContainer === _this.parent.inputElement) {
if (!(_this.parent.inputElement.childNodes.length === 1 && _this.parent.inputElement.childNodes[0].nodeName === 'TABLE')) {
if (isNOU(_this.range.startContainer.childNodes[_this.range.startOffset])) {
var currentLastElem = _this.range.startContainer.childNodes[_this.range.startOffset - 1];
while (currentLastElem.lastChild !== null && currentLastElem.nodeName !== '#text') {
currentLastElem = currentLastElem.lastChild;
}
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), currentLastElem, (currentLastElem.nodeName === 'BR' ? 0 : currentLastElem.textContent.length));
}
else {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.range.startContainer.childNodes[_this.range.startOffset], 0);
}
}
_this.getRangeNode();
}
var isImageAtStartNode = (_this.range.startContainer.childNodes.length > 0 && _this.range.startContainer.childNodes[0].textContent.trim() === ''
&& !isNOU(_this.range.startContainer.childNodes[_this.range.startOffset]) && _this.range.startContainer.childNodes[_this.range.startOffset].nodeName === 'IMG');
if ((_this.parent.enterKey === 'P' && !shiftKey_1) || (_this.parent.enterKey === 'DIV' && !shiftKey_1) ||
(_this.parent.shiftEnterKey === 'P' && shiftKey_1) ||
(_this.parent.shiftEnterKey === 'DIV' && shiftKey_1)) {
if ((_this.range.startOffset === 1 && _this.parent.inputElement.childNodes.length === 1 && _this.parent.inputElement.childNodes[0].nodeName === 'TABLE')) {
var newElem = _this.createInsertElement(shiftKey_1);
newElem.appendChild(_this.parent.createElement('BR'));
_this.parent.inputElement.appendChild(newElem);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);
}
else {
var nearBlockNode = void 0;
if (isTableEnter && _this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {
if (_this.range.startContainer.nodeName === '#text' && !isNOU(_this.range.startContainer.previousSibling) && _this.range.startContainer.previousSibling.nodeName === 'HR') {
nearBlockNode = _this.range.startContainer.nextSibling;
}
else {
nearBlockNode = _this.startNode;
}
}
else {
nearBlockNode = _this.parent.formatter.editorManager.domNode.blockParentNode(_this.startNode);
}
var isMediaNode = false; // To check the image audio and video node cases
var isFocusedFirst = false;
var parentElement = _this.range.startContainer.parentElement;
var isPreWrapApplied = false;
var isTextWrapApplied = false;
if (parentElement) {
var computedStyle = _this.parent.contentModule.getDocument()
.defaultView.getComputedStyle(parentElement);
isPreWrapApplied = computedStyle.getPropertyValue('white-space') === 'pre-wrap';
isTextWrapApplied = computedStyle.getPropertyValue('text-wrap') === 'nowrap';
}
if (_this.range.startOffset !== 0 && _this.range.endOffset !== 0 &&
_this.range.startContainer === _this.range.endContainer && !(!isNOU(nearBlockNode.childNodes[0])
&& (nearBlockNode.childNodes[0].nodeName === 'IMG' || nearBlockNode.querySelectorAll('img, audio, video').length > 0))) {
var startNodeText = _this.range.startContainer.textContent;
var splitFirstText = startNodeText.substring(0, _this.range.startOffset);
var lastCharBeforeCursor = splitFirstText.charCodeAt(_this.range.startOffset - 1);
var isSplitTextEmpty = splitFirstText.trim().length === 0;
if (isSplitTextEmpty && _this.range.startContainer.nodeName !== '#text' && _this.range.startContainer.firstChild &&
_this.range.startContainer.firstChild.nodeType === Node.ELEMENT_NODE && _this.range.startContainer.firstChild.getAttribute('contenteditable') === 'false') {
isSplitTextEmpty = startNodeText.trim().length === 0;
}
var hasContentAfterCursor = startNodeText.slice(_this.range.startOffset).trim().length !== 0;
var isCursorAtStartNonPreWrap = lastCharBeforeCursor !== 160
&& isSplitTextEmpty && !isPreWrapApplied && !isTextWrapApplied;
var isCursorAtStartPreWrapWithContent = lastCharBeforeCursor === 32
&& (isPreWrapApplied || isTextWrapApplied) && isSplitTextEmpty && hasContentAfterCursor;
if ((isCursorAtStartNonPreWrap || isCursorAtStartPreWrapWithContent) &&
!_this.range.startContainer.previousSibling) {
isFocusedFirst = true;
}
}
else if ((_this.range.startOffset === 0 && _this.range.endOffset === 0) ||
(_this.range.startOffset === 1 && _this.range.endOffset === 1 && isImageAtStartNode)) {
isFocusedFirst = true;
}
_this.removeBRElement(nearBlockNode);
var fireFoxEnterAtMiddle = Browser.userAgent.indexOf('Firefox') !== -1 && _this.range.startOffset === 0 && _this.range.startContainer === _this.range.endContainer &&
_this.range.startContainer.nodeName === '#text' && !isNOU(_this.range.startContainer.previousSibling) && !_this.parent.formatter.editorManager.domNode.isBlockNode(_this.range.startContainer.previousSibling) &&
_this.range.startContainer.parentElement === _this.range.startContainer.previousSibling.parentElement;
var preventZeroWithSpace = ((_this.range.startContainer.nodeName === '#text' && _this.range.startContainer.textContent.includes('\u200B') &&
_this.range.startContainer.textContent.trim() === '\u200B') ||
(_this.range.startContainer.nodeName === '#text' && !isNOU(_this.range.startContainer.textContent[_this.range.startOffset]) &&
_this.range.startContainer.textContent[_this.range.startOffset].includes('\u200B') && _this.range.startContainer.textContent[_this.range.startOffset] === '\u200B' &&
_this.parent.inputElement.textContent[0] !== '\u200B'));
var preventEnterkeyShiftKey = (_this.range.startContainer.nodeName === '#text' || _this.range.startContainer.nodeName === 'BR') && (_this.range.startOffset === 0 && _this.range.endOffset === 0) && _this.range.startContainer.parentElement === _this.parent.inputElement && _this.parent.enterKey === 'BR' && shiftKey_1;
// eslint-disable-next-line max-len
if (!preventEnterkeyShiftKey && !preventZeroWithSpace && !fireFoxEnterAtMiddle && _this.range.startContainer.nodeName !== 'HR' && ((_this.range.startOffset === 0 && _this.range.endOffset === 0) || isFocusedFirst) &&
!(!isNOU(_this.range.startContainer.previousSibling) &&
(_this.range.startContainer.previousSibling.nodeName === 'IMG' || _this.range.startContainer.previousSibling.nodeName === 'BR'))) {
var isNearBlockLengthZero = void 0;
var newElem = void 0;
if (!isNOU(_this.range.startContainer.childNodes) &&
(_this.range.startContainer.textContent.length === 0 ||
(_this.range.startContainer.nodeName !== '#text' && !isNOU(_this.range.startContainer.querySelector('.e-video-clickelem')) &&
_this.range.startContainer.querySelector('.e-video-clickelem').textContent.length === 0)) &&
(_this.range.startContainer.querySelectorAll('img, audio, video').length > 0 ||
!isNOU(_this.range.startContainer.querySelector('.e-video-clickelem')) ||
_this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.nodeName === 'TABLE')) {
newElem = _this.createInsertElement(shiftKey_1);
isMediaNode = true;
isNearBlockLengthZero = false;
}
else {
if ((nearBlockNode.textContent.trim().length !== 0 ||
(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG') ||
(nearBlockNode.textContent.trim() === '' && nearBlockNode.querySelectorAll('img, audio, video').length > 0))) {
if ((_this.range.startOffset === _this.range.endOffset && _this.range.startOffset !== 0)) {
newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
}
else {
newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
isMediaNode = true;
}
isNearBlockLengthZero = false;
}
else {
newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true).cloneNode(true);
isNearBlockLengthZero = true;
}
}
var insertElem = void 0;
if (_this.formatTags.indexOf(newElem.nodeName.toLocaleLowerCase()) < 0) {
insertElem = _this.createInsertElement(shiftKey_1);
}
else {
insertElem = _this.parent.createElement(newElem.nodeName);
}
while (newElem.firstChild) {
insertElem.appendChild(newElem.firstChild);
}
var isAudioVideo = _this.range.startContainer !== nearBlockNode && (nearBlockNode.querySelector('.e-video-wrap') ||
nearBlockNode.querySelector('.e-audio-wrap') && _this.range.startContainer.classList.contains('e-clickelem')) ? true : false;
var isImageElement = _this.range.startContainer !== nearBlockNode && nearBlockNode.querySelector('img') ? true : false;
if (isAudioVideo) {
_this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);
}
else {
nearBlockNode.parentElement.insertBefore(insertElem, nearBlockNode);
}
if (!isNearBlockLengthZero) {
var currentFocusElem = insertElem;
var finalFocusElem = void 0;
if (_this.range.startOffset === _this.range.endOffset && _this.range.startOffset !== 0) {
while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text' &&
currentFocusElem.nodeName !== 'BR') {
finalFocusElem = currentFocusElem;
currentFocusElem = currentFocusElem.lastChild;
}
}
else {
finalFocusElem = currentFocusElem;
}
finalFocusElem.innerHTML = '<br>';
if (!isMediaNode) {
detach(nearBlockNode);
}
}
if (isAudioVideo || isImageElement) {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);
}
else {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem.nextElementSibling, 0);
}
}
else if (nearBlockNode !== _this.parent.inputElement && nearBlockNode.textContent.length === 0 && !(!isNOU(nearBlockNode.childNodes[0]) && nearBlockNode.childNodes[0].nodeName === 'IMG' ||
(nearBlockNode.querySelectorAll('video').length > 0) || (nearBlockNode.querySelectorAll('audio').length > 0) || (nearBlockNode.querySelectorAll('img').length > 0))) {
if (!isNOU(nearBlockNode.children[0]) && nearBlockNode.children[0].tagName !== 'BR') {
var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, false).cloneNode(true);
_this.parent.formatter.editorManager.domNode.insertAfter(newElem, nearBlockNode);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, newElem.textContent.length >= 0 ? 0 : 1);
}
else {
var insertElem = _this.createInsertElement(shiftKey_1);
insertElem.innerHTML = '<br>';
_this.parent.formatter.editorManager.domNode.insertAfter(insertElem, nearBlockNode);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), insertElem, 0);
}
}
else if (_this.range.startContainer === _this.range.endContainer && _this.range.startContainer.nodeType !== Node.TEXT_NODE && ((_this.range.startContainer.nodeName === 'IMG' || _this.range.startContainer.querySelector('img')) ||
(_this.range.startContainer.nodeName === 'SPAN' && (_this.range.startContainer.classList.contains('e-video-wrap') ||
_this.range.startContainer.classList.contains('e-audio-wrap'))))) {
if (nearBlockNode.textContent.trim().length > 0) {
var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
var audioVideoElem = !isNOU(newElem.previousSibling.querySelector('.e-video-wrap')) ?
newElem.previousSibling.querySelector('.e-video-wrap') : newElem.previousSibling.querySelector('.e-audio-wrap');
var isBRInserted = false;
if (!isNOU(audioVideoElem)) {
var lastNode = audioVideoElem.previousSibling;
while (!isNOU(lastNode) && lastNode.nodeName !== '#text') {
lastNode = lastNode.lastChild;
}
if (isNOU(lastNode)) {
var brElm = _this.parent.createElement('br');
audioVideoElem.parentElement.appendChild(brElm);
isBRInserted = true;
}
if (isBRInserted) {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), audioVideoElem.parentElement, 0);
}
else {
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), lastNode, lastNode.textContent.length);
}
detach(audioVideoElem);
}
}
else {
var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
var focusElem = newElem.hasChildNodes() ? newElem.previousSibling : newElem;
var imageElem = !isNOU(newElem.querySelector('img')) ?
newElem.querySelector('img') : null;
var insertElem = _this.createInsertElement(shiftKey_1);
if (!isNOU(imageElem)) {
if (isFocusedFirst) {
newElem.parentElement.insertBefore(insertElem, newElem);
focusElem = newElem.previousSibling;
}
else {
_this.parent.formatter.editorManager.domNode.insertAfter(insertElem, newElem);
focusElem = newElem.nextSibling;
}
}
else if (isNOU(imageElem) && focusElem.querySelector('img')) {
focusElem = newElem;
}
while (!isNOU(focusElem.firstChild)) {
detach(focusElem.firstChild);
}
var brElm = _this.parent.createElement('br');
focusElem.appendChild(brElm);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusElem, 0);
}
if (!isNOU(_this.parent.audioModule)) {
_this.parent.audioModule.hideAudioQuickToolbar();
}
if (!isNOU(_this.parent.videoModule)) {
_this.parent.videoModule.hideVideoQuickToolbar();
}
}
else if (_this.parent.enterKey === 'BR' && shiftKey_1 && _this.range.startContainer.nodeType === Node.TEXT_NODE && _this.range.startContainer.parentElement && _this.range.startContainer.parentElement === _this.parent.inputElement) {
var range = _this.range;
var startContainer = range.startContainer;
var startOffset = range.startOffset;
var newElement = _this.parent.createElement(_this.parent.shiftEnterKey);
if (startContainer.nodeType === Node.TEXT_NODE && range.endOffset !== 0 && range.startOffset !== 0) {
var textNode = startContainer;
if (startOffset < textNode.length) {
var newTextNode = textNode.splitText(startOffset);
newElement.appendChild(newTextNode);
}
else {
newElement.innerHTML = '<br>';
}
textNode.parentNode.insertBefore(newElement, textNode.nextSibling);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElement, 0);
}
else if (startOffset === 0 && range.endOffset === 0) {
newElement.innerHTML = '<br>';
if (range.endOffset === startContainer.textContent.length) {
var brElement = _this.parent.createElement('br');
startContainer.parentNode.insertBefore(brElement, startContainer);
}
startContainer.parentNode.insertBefore(newElement, startContainer);
var cursorTarget = (range.endOffset === startContainer.textContent.length)
? newElement : newElement.nextSibling;
startContainer.parentNode.insertBefore(newElement, startContainer);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), cursorTarget, 0);
}
}
else {
var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, nearBlockNode, true);
if (!isNOU(newElem.childNodes[0]) && newElem.childNodes[0].nodeName === '#text' &&
newElem.childNodes[0].textContent.length === 0) {
detach(newElem.childNodes[0]);
}
if (newElem.textContent.trim().length === 0 || (newElem.childNodes[0].textContent.trim().includes('\u200B') && newElem.childNodes[0].textContent.trim() === '\u200B')) {
var brElm = _this.parent.createElement('br');
if (_this.startNode.nodeName === 'A' || _this.startNode.closest('a')) {
_this.startNode = _this.startNode.nodeName === 'A' ? _this.startNode :
_this.startNode.closest('a');
var startParentElem = _this.startNode.parentElement;
_this.startNode.parentElement.insertBefore(brElm, _this.startNode);
detach(_this.startNode);
_this.startNode = startParentElem;
}
else {
if (_this.startNode.nodeName !== 'BR') {
_this.startNode.appendChild(brElm);
}
}
if (newElem.childNodes[0].textContent === '\n') {
detach(newElem.childNodes[0]);
}
if (newElem.childNodes[0].textContent.trim().includes('\u200B') && newElem.childNodes[0].textContent.trim() === '\u200B') {
detach(newElem.childNodes[0]);
}
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), _this.startNode, 0);
}
if (((_this.parent.enterKey === 'P' || _this.parent.enterKey === 'DIV') && !shiftKey_1) || ((_this.parent.shiftEnterKey === 'DIV' ||
_this.parent.shiftEnterKey === 'P') && shiftKey_1)) {
var isHeadingTag = _this.formatTags.indexOf(newElem.nodeName.toLocaleLowerCase());
if ((isHeadingTag < 0) || (isHeadingTag >= 0 && newElem.textContent.trim().length === 0)) {
var insertElm = _this.createInsertElement(shiftKey_1);
while (newElem.firstChild) {
insertElm.appendChild(newElem.firstChild);
}
_this.parent.formatter.editorManager.domNode.insertAfter(insertElm, newElem);
detach(newElem);
var curElement = _this.parent.formatter.editorManager.domNode.
isBlockNode(_this.startNode) ? insertElm : _this.startNode;
var cusrPos = 0;
if (curElement && (curElement.nodeName === 'A' || curElement.closest('a'))) {
curElement = curElement.nodeName === 'A' ? curElement :
curElement.closest('a');
curElement = _this.getFirstTextNode(curElement);
curElement.nodeValue = '\u200B' + curElement.nodeValue;
cusrPos = 1;
}
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), curElement, cusrPos);
}
}
}
}
e.args.preventDefault();
}
if ((_this.parent.enterKey === 'BR' && !shiftKey_1) || (_this.parent.shiftEnterKey === 'BR' && shiftKey_1)) {
var currentParent = void 0;
if (!_this.parent.formatter.editorManager.domNode.isBlockNode(_this.startNode)) {
var currentNode = _this.startNode;
var previousNode = currentNode;
while (!_this.parent.formatter.editorManager.domNode.isBlockNode(currentNode)) {
previousNode = currentNode;
currentNode = currentNode.parentElement;
}
currentParent = currentNode === _this.parent.inputElement ?
previousNode : currentNode;
}
else {
currentParent = _this.startNode;
}
var currentParentStyle = window.getComputedStyle(currentParent);
_this.removeBRElement(currentParent);
var isEmptyBrInserted = false;
var currentParentLastChild = currentParent.lastChild;
while (!isNOU(currentParentLastChild) && !(currentParentLastChild.nodeName === '#text' || currentParentLastChild.nodeName === 'BR'
|| currentParentLastChild.nodeName === 'IMG')) {
currentParentLastChild = currentParentLastChild.lastChild;
}
var isLastNodeLength = _this.range.startContainer === currentParentLastChild ?
_this.range.startContainer.textContent.length : currentParent.textContent.length;
var isImageElement = (_this.range.startContainer.nodeName === 'IMG' || (_this.range.startContainer.childNodes.length > 0
&& !isNOU(_this.range.startContainer.childNodes[_this.range.startOffset]) && _this.range.startContainer.childNodes[_this.range.startOffset].nodeName === 'IMG') || (_this.range.startContainer.nodeType === 1 &&
_this.range.startContainer.querySelector('img') !== null));
if (currentParent !== _this.parent.inputElement &&
_this.parent.formatter.editorManager.domNode.isBlockNode(currentParent) &&
_this.range.startOffset === _this.range.endOffset &&
(_this.range.startOffset === isLastNodeLength ||
(currentParent.textContent.trim().length === 0 && isImageElement))) {
var focusBRElem = _this.parent.createElement('br');
if (_this.range.startOffset === 0 && _this.range.startContainer.nodeName === 'TABLE') {
_this.range.startContainer.parentElement.insertBefore(focusBRElem, _this.range.startContainer);
}
else {
if (currentParentLastChild.nodeName === 'BR' && currentParent.textContent.length === 0) {
_this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, currentParentLastChild);
}
else if (_this.range.startOffset === 0 && _this.range.endOffset === 0 && isImageElement) {
var imageElement = _this.range.startContainer.nodeName === 'IMG' ? _this.range.startContainer :
_this.range.startContainer.childNodes[_this.range.startOffset];
currentParent.insertBefore(focusBRElem, imageElement);
}
else if (_this.range.startOffset === 1 && _this.range.endOffset === 1 && isImageAtStartNode) {
currentParent.insertBefore(focusBRElem, _this.range.startContainer);
}
else {
var lineBreakBRElem = _this.parent.createElement('br');
var parentElement = _this.range.startContainer.parentElement;
var anchorElement = void 0;
if (parentElement && parentElement.nodeName === 'A' &&
parentElement.textContent.length === _this.range.startOffset) {
anchorElement = parentElement;
}
else if (parentElement) {
var closestAnchor = parentElement.closest('a');
anchorElement = closestAnchor ? closestAnchor : _this.range.startContainer;
}
_this.parent.formatter.editorManager.domNode.insertAfter(focusBRElem, anchorElement);
_this.parent.formatter.editorManager.domNode.insertAfter(lineBreakBRElem, anchorElement);
var brSibling = anchorElement.nextElementSibling;
var brNextSibling = !isNOU(brSibling) ? brSibling.nextElementSibling : null;
if (!isNOU(brSibling) && !isNOU(brNextSibling) && !isNOU(brNextSibling.nextElementSibling) &&
brSibling.nodeName === 'BR' && brNextSibling.nodeName === 'BR' && brNextSibling.nextElementSibling.nodeName === 'BR') {
brNextSibling.nextElementSibling.remove();
}
}
}
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), focusBRElem, 0);
}
else if (!isNOU(currentParent) && currentParent !== _this.parent.inputElement && currentParent.nodeName !== 'BR') {
if (currentParent.textContent.trim().length === 0 || (currentParent.textContent.trim().length === 1 &&
currentParent.textContent.charCodeAt(0) === 8203)) {
if ((currentParent.childElementCount > 0 && currentParent.lastElementChild.nodeName === 'IMG') || (currentParent.lastElementChild && currentParent.lastElementChild.nodeName === 'BR') || !isNOU(currentParent.firstElementChild) &&
(currentParent.querySelector('.e-video-wrap') || currentParent.querySelector('.e-audio-wrap'))) {
_this.insertBRElement();
}
else {
var newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, true).cloneNode(true);
_this.parent.formatter.editorManager.domNode.insertAfter(newElem, currentParent);
var outerBRElem = _this.parent.createElement('br');
newElem.parentElement.insertBefore(outerBRElem, newElem);
_this.parent.formatter.editorManager.nodeSelection.setCursorPoint(_this.parent.contentModule.getDocument(), newElem, 0);
}
}
else {
var newElem = void 0;
var outerBRElem = _this.parent.createElement('br');
if (_this.range.startOffset === 0 && _this.range.endOffset === 0 &&
!isNOU(currentParent.previousSibling) && currentParent.previousSibling.nodeName === 'BR' && currentParent.nodeName !== 'P' && currentParent.nodeName !== 'DIV') {
newElem = _this.parent.formatter.editorManager.nodeCutter.SplitNode(_this.range, currentParent, false).cloneNode(true);
_this.parent.formatter.editorManager.domNode.insertAfter(outerBRElem, currentParent);
_this.insertFocusContent();
var currentFocusElem = outerBRElem.nextSibling;
while (!isNOU(currentFocusElem) && currentFocusElem.nodeName !== '#text') {
currentFocusElem = currentFocusElem.lastChild;