@syncfusion/ej2-richtexteditor 27.2.2 → 27.2.4

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.
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * filename: index.d.ts
3
- * version : 27.2.2
3
+ * version : 27.2.4
4
4
  * Copyright Syncfusion Inc. 2001 - 2023. All rights reserved.
5
5
  * Use of this code is subject to the terms of our license.
6
6
  * A copy of the current license can be obtained at any time by e-mailing
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "_from": "@syncfusion/ej2-richtexteditor@*",
3
- "_id": "@syncfusion/ej2-richtexteditor@27.1.58",
3
+ "_id": "@syncfusion/ej2-richtexteditor@27.2.3",
4
4
  "_inBundle": false,
5
- "_integrity": "sha512-Mh3t2LCFc+U9cNHK+RW1CSAMAdEXR1MtXB6bm0CzjWQUvz5Rw96pX4GLVIiNEnodxod34bycX8mXnV1Blrr1Hg==",
5
+ "_integrity": "sha512-pp9x/DFwkNSSE2Tan2Lp5VmSNG56ukyqIdbHdqMEBOKVTCqX5nlYCpEjTU4T6piBi4BlbeiEcjasWJxtc3ZhNw==",
6
6
  "_location": "/@syncfusion/ej2-richtexteditor",
7
7
  "_phantomChildren": {},
8
8
  "_requested": {
@@ -25,8 +25,8 @@
25
25
  "/@syncfusion/ej2-react-richtexteditor",
26
26
  "/@syncfusion/ej2-vue-richtexteditor"
27
27
  ],
28
- "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-27.1.58.tgz",
29
- "_shasum": "a8af7e987df55ace85a6b6f36e76e57aebab28fd",
28
+ "_resolved": "https://nexus.syncfusioninternal.com/repository/ej2-hotfix-new/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-27.2.3.tgz",
29
+ "_shasum": "c4636a9f71acd2f9a8a0a63cbfb22593f71ac168",
30
30
  "_spec": "@syncfusion/ej2-richtexteditor@*",
31
31
  "_where": "/jenkins/workspace/elease-automation_release_27.1.1/packages/included",
32
32
  "author": {
@@ -38,11 +38,11 @@
38
38
  "bundleDependencies": false,
39
39
  "dependencies": {
40
40
  "@syncfusion/ej2-base": "~27.2.2",
41
- "@syncfusion/ej2-buttons": "~27.2.2",
42
- "@syncfusion/ej2-dropdowns": "~27.2.2",
43
- "@syncfusion/ej2-filemanager": "~27.2.2",
44
- "@syncfusion/ej2-inputs": "~27.2.2",
45
- "@syncfusion/ej2-navigations": "~27.2.2",
41
+ "@syncfusion/ej2-buttons": "~27.2.4",
42
+ "@syncfusion/ej2-dropdowns": "~27.2.4",
43
+ "@syncfusion/ej2-filemanager": "~27.2.3",
44
+ "@syncfusion/ej2-inputs": "~27.2.4",
45
+ "@syncfusion/ej2-navigations": "~27.2.4",
46
46
  "@syncfusion/ej2-popups": "~27.2.2",
47
47
  "@syncfusion/ej2-splitbuttons": "~27.2.2"
48
48
  },
@@ -80,6 +80,6 @@
80
80
  "url": "git+https://github.com/syncfusion/ej2-javascript-ui-controls.git"
81
81
  },
82
82
  "typings": "index.d.ts",
83
- "version": "27.2.2",
83
+ "version": "27.2.4",
84
84
  "sideEffects": false
85
85
  }
@@ -50,7 +50,7 @@ var NodeCutter = /** @class */ (function () {
50
50
  fragment = this.spliceEmptyNode(fragment, false);
51
51
  if (fragment && fragment.childNodes.length > 0) {
52
52
  var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG' && !(fragment.querySelectorAll('img').length > 0)
53
- && this.isRteElm(fragment) && fragment.textContent.trim() === '' && fragment.textContent !== ' ' && fragment.textContent.charCodeAt(0) !== 160) ? true : false;
53
+ && this.isRteElm(fragment) && fragment.textContent.trim() === '' && fragment.textContent.charCodeAt(0) !== 32 && fragment.textContent.charCodeAt(0) !== 160) ? true : false;
54
54
  if (!isEmpty) {
55
55
  if (node) {
56
56
  InsertMethods.AppendBefore(fragment, node);
@@ -71,11 +71,16 @@ var NodeCutter = /** @class */ (function () {
71
71
  fragment = this.spliceEmptyNode(fragment, true);
72
72
  if (fragment && fragment.childNodes.length > 0) {
73
73
  var isEmpty = (fragment.childNodes.length === 1 && fragment.childNodes[0].nodeName !== 'IMG'
74
- && this.isRteElm(fragment) && fragment.textContent.trim() === '' && fragment.textContent !== ' ' && fragment.textContent.charCodeAt(0) !== 160) ? true : false;
74
+ && this.isRteElm(fragment) && fragment.textContent.trim() === '' && fragment.textContent.charCodeAt(0) !== 32 && fragment.textContent.charCodeAt(0) !== 160) ? true : false;
75
75
  if (!isEmpty) {
76
76
  if (node) {
77
77
  InsertMethods.AppendBefore(fragment, node, true);
78
78
  }
79
+ else if (parent_1.childNodes.length > 1 && parent_1.childNodes.length !== index) {
80
+ node = parent_1.childNodes[parent_1.childNodes.length - 1];
81
+ InsertMethods.AppendBefore(fragment, node, true);
82
+ node = node.nextSibling;
83
+ }
79
84
  else {
80
85
  parent_1.appendChild(fragment);
81
86
  var divNode = document.createElement('div');
@@ -284,8 +284,10 @@ var SelectionCommands = /** @class */ (function () {
284
284
  range.startContainer.textContent.substring(range.startOffset, range.startContainer.textContent.length) :
285
285
  range.startContainer.textContent;
286
286
  var nodeText = nodes[index].textContent;
287
+ var isParentNodeSameAsParentElement = nodes[0].parentElement.nodeName === nodes[0].parentElement.parentElement.nodeName;
287
288
  if (!(range.startContainer === range.endContainer && range.startOffset === 0
288
- && range.endOffset === range.startContainer.length)) {
289
+ && range.endOffset === range.startContainer.length
290
+ && (range.startContainer.textContent === formatNode.textContent || isParentNodeSameAsParentElement))) {
289
291
  var nodeIndex = [];
290
292
  var cloneNode = nodes[index];
291
293
  var clonedElement = cloneNode;
@@ -306,10 +308,19 @@ var SelectionCommands = /** @class */ (function () {
306
308
  if (!isCursor) {
307
309
  while (cloneNode && cloneNode.childNodes.length > 0 && ((nodeIndex.length - 1) >= 0)
308
310
  && (cloneNode.childNodes.length > nodeIndex[nodeIndex.length - 1])) {
309
- cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];
310
- nodeIndex.pop();
311
+ if (cloneNode.childNodes.length > 1 && nodeIndex.length > 1) {
312
+ cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 2]];
313
+ break;
314
+ }
315
+ else {
316
+ cloneNode = cloneNode.childNodes[nodeIndex[nodeIndex.length - 1]];
317
+ nodeIndex.pop();
318
+ }
311
319
  }
312
320
  if (nodes[index].nodeName !== 'BR') {
321
+ while (cloneNode.nodeType === 1 && cloneNode.childNodes.length > 0) {
322
+ cloneNode = cloneNode.childNodes[0];
323
+ }
313
324
  if (cloneNode.nodeType === 3 && !(isCursor && cloneNode.nodeValue === '')) {
314
325
  nodes[index] = cloneNode;
315
326
  }
@@ -113,11 +113,11 @@ var DropDownButtons = /** @class */ (function () {
113
113
  command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontName', enumerable: true }
114
114
  });
115
115
  });
116
- var fontNameContent = isNullOrUndefined(_this.parent.fontFamily.default) ? fontItem[0].text :
116
+ var fontNameContent = isNullOrUndefined(_this.parent.fontFamily.default) ? fontItem.length === 0 ? '' : fontItem[0].text :
117
117
  _this.parent.fontFamily.default;
118
118
  _this.fontNameDropDown = _this.toolbarRenderer.renderDropDownButton({
119
119
  iconCss: ((type === 'quick') ? 'e-font-name e-icons' : ''),
120
- content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((type === 'quick') ? '' : (getDropDownValue(fontItem, fontNameContent, 'text', 'text') === 'Default' ? _this.i10n.getConstant('fontName') : getDropDownValue(fontItem, fontNameContent, 'text', 'text')))),
120
+ content: _this.dropdownContent(_this.parent.fontFamily.width, type, ((fontItem.length === 0) ? _this.i10n.getConstant('fontName') : (type === 'quick') ? '' : (getDropDownValue(fontItem, fontNameContent, 'text', 'text') === 'Default' ? _this.i10n.getConstant('fontName') : getDropDownValue(fontItem, fontNameContent, 'text', 'text')))),
121
121
  cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_NAME_TB_BTN,
122
122
  itemName: 'FontName', items: fontItem, element: targetElement
123
123
  });
@@ -136,11 +136,11 @@ var DropDownButtons = /** @class */ (function () {
136
136
  command: { value: 'Font', enumerable: true }, subCommand: { value: 'FontSize', enumerable: true }
137
137
  });
138
138
  });
139
- var fontSizeContent = isNullOrUndefined(_this.parent.fontSize.default) ? fontsize[0].text :
139
+ var fontSizeContent = isNullOrUndefined(_this.parent.fontSize.default) ? fontsize.length === 0 ? '' : fontsize[0].text :
140
140
  _this.parent.fontSize.default;
141
141
  var fontSizeDropDownContent = ((fontSizeContent === 'Default') ? getDropDownValue(fontsize, fontSizeContent.replace(/\s/g, ''), 'text', 'text') : getDropDownValue(fontsize, fontSizeContent.replace(/\s/g, ''), 'value', 'text'));
142
142
  _this.fontSizeDropDown = _this.toolbarRenderer.renderDropDownButton({
143
- content: _this.dropdownContent(_this.parent.fontSize.width, type, getFormattedFontSize((fontSizeDropDownContent === 'Default') ? _this.i10n.getConstant('fontSize') : fontSizeDropDownContent)),
143
+ content: _this.dropdownContent(_this.parent.fontSize.width, type, fontsize.length === 0 ? _this.i10n.getConstant('fontSize') : (getFormattedFontSize((fontSizeDropDownContent === 'Default') ? _this.i10n.getConstant('fontSize') : fontSizeDropDownContent))),
144
144
  cssClass: classes.CLS_DROPDOWN_POPUP + ' ' + classes.CLS_DROPDOWN_ITEMS + ' ' + classes.CLS_FONT_SIZE_TB_BTN,
145
145
  itemName: 'FontSize', items: fontsize, element: targetElement
146
146
  });
@@ -172,13 +172,21 @@ var EnterKeyAction = /** @class */ (function () {
172
172
  }
173
173
  var isMediaNode = false; // To check the image audio and video node cases
174
174
  var isFocusedFirst = false;
175
+ var parentElement = _this.range.startContainer.parentElement;
176
+ var isPreWrapApplied = parentElement ? _this.parent.contentModule.getDocument().defaultView.getComputedStyle(_this.range.startContainer.parentElement, null).getPropertyValue('white-space') === 'pre-wrap' : false;
175
177
  if (_this.range.startOffset !== 0 && _this.range.endOffset !== 0 &&
176
178
  _this.range.startContainer === _this.range.endContainer && !(!isNOU(nearBlockNode.childNodes[0])
177
179
  && (nearBlockNode.childNodes[0].nodeName === 'IMG' || nearBlockNode.querySelectorAll('img, audio, video').length > 0))) {
178
180
  var startNodeText = _this.range.startContainer.textContent;
179
181
  var splitFirstText = startNodeText.substring(0, _this.range.startOffset);
180
- // eslint-disable-next-line max-len
181
- if (splitFirstText.charCodeAt(_this.range.startOffset - 1) !== 160 && splitFirstText.trim().length === 0) {
182
+ var lastCharBeforeCursor = splitFirstText.charCodeAt(_this.range.startOffset - 1);
183
+ var isSplitTextEmpty = splitFirstText.trim().length === 0;
184
+ var hasContentAfterCursor = startNodeText.slice(_this.range.startOffset).trim().length !== 0;
185
+ var isCursorAtStartNonPreWrap = lastCharBeforeCursor !== 160
186
+ && isSplitTextEmpty && !isPreWrapApplied;
187
+ var isCursorAtStartPreWrapWithContent = lastCharBeforeCursor === 32
188
+ && isPreWrapApplied && isSplitTextEmpty && hasContentAfterCursor;
189
+ if (isCursorAtStartNonPreWrap || isCursorAtStartPreWrapWithContent) {
182
190
  isFocusedFirst = true;
183
191
  }
184
192
  }
@@ -421,7 +421,10 @@ var HtmlEditor = /** @class */ (function () {
421
421
  var editorValue = currentRange_1.startContainer.textContent.slice(0, currentRange_1.startOffset);
422
422
  var orderedList_1 = this.isOrderedList(editorValue);
423
423
  var unOrderedList = this.isUnOrderedList(editorValue);
424
- var hasSplitedText = this.hasMultipleTextNode(currentRange_1);
424
+ var hasSplitedText = false;
425
+ if (orderedList_1 || unOrderedList) {
426
+ hasSplitedText = this.hasMultipleTextNode(currentRange_1);
427
+ }
425
428
  if (!hasSplitedText && (orderedList_1 && !unOrderedList || unOrderedList && !orderedList_1)) {
426
429
  var eventArgs_1 = {
427
430
  callBack: null,
@@ -491,6 +494,11 @@ var HtmlEditor = /** @class */ (function () {
491
494
  HtmlEditor.prototype.hasMultipleTextNode = function (range) {
492
495
  if (range && range.startContainer && range.startContainer.parentNode) {
493
496
  var parentNode = range.startContainer.parentNode;
497
+ if (range.startContainer.previousElementSibling &&
498
+ range.startContainer.previousElementSibling.classList.contains('e-mention-chip')
499
+ && !range.startContainer.previousElementSibling.isContentEditable) {
500
+ return true;
501
+ }
494
502
  if (this.parent.enterKey === 'BR' || closest(parentNode, 'table')) {
495
503
  return false;
496
504
  }
@@ -576,10 +584,21 @@ var HtmlEditor = /** @class */ (function () {
576
584
  // eslint-disable-next-line
577
585
  lastNode, lastNode.textContent.length);
578
586
  }
579
- if (this.oldRangeElement.nodeName !== '#text' && this.oldRangeElement.querySelectorAll('BR').length === 1) {
580
- detach(this.oldRangeElement.querySelector('BR'));
587
+ var checkParent = false;
588
+ if (this.oldRangeElement && this.oldRangeElement.nodeName !== '#text' && this.oldRangeElement.querySelectorAll('BR').length === 1) {
589
+ var brElement = this.oldRangeElement.querySelector('BR');
590
+ if (brElement) {
591
+ var brParentElement = brElement.parentNode;
592
+ var currentState = this.oldRangeElement.innerHTML;
593
+ this.parent.formatter.saveData(currentState);
594
+ detach(brElement);
595
+ if (brParentElement && brParentElement.childNodes.length === 0) {
596
+ detach(brParentElement);
597
+ checkParent = true;
598
+ }
599
+ }
581
600
  }
582
- if (!isNOU(this.rangeElement) && this.oldRangeElement !== this.rangeElement) {
601
+ if (!isNOU(this.rangeElement) && this.oldRangeElement !== this.rangeElement && !checkParent) {
583
602
  while (this.rangeElement.firstChild) {
584
603
  if (this.oldRangeElement.nodeName === '#text') {
585
604
  this.oldRangeElement.parentElement.appendChild(this.rangeElement.childNodes[0]);
@@ -169,6 +169,13 @@ var Toolbar = /** @class */ (function () {
169
169
  target: this.tbElement,
170
170
  cssClass: this.parent.getCssClass()
171
171
  });
172
+ if (this.parent.element.classList.contains('e-rte-full-screen')) {
173
+ this.updateItem({
174
+ targetItem: 'Maximize',
175
+ updateItem: 'Minimize',
176
+ baseToolbar: this.parent.getBaseToolbarObject()
177
+ });
178
+ }
172
179
  if (!this.parent.inlineMode.enable) {
173
180
  if (this.parent.toolbarSettings.enableFloating) {
174
181
  this.checkIsTransformChild();
@@ -54,6 +54,9 @@ export function hasClass(element, className) {
54
54
  export function getDropDownValue(items, value, type, returnType) {
55
55
  var data;
56
56
  var result;
57
+ if (items.length === 0 && value === 'FontSize') {
58
+ return 'Font Size';
59
+ }
57
60
  for (var k = 0; k < items.length; k++) {
58
61
  if (type === 'value' && items[k].value.toLocaleLowerCase() === value.toLocaleLowerCase()) {
59
62
  data = items[k];
@@ -202,7 +205,7 @@ export function setToolbarStatus(e, isPopToolbar, self) {
202
205
  }
203
206
  var fontNameItems = e.parent.fontFamily.items;
204
207
  result = value === 'empty' ? '' : getDropDownValue(fontNameItems, value, 'value', 'text');
205
- var fontNameContent = isNOU(e.parent.fontFamily.default) ? fontNameItems[0].text :
208
+ var fontNameContent = isNOU(e.parent.fontFamily.default) ? (fontNameItems.length === 0) ? self.serviceLocator.getService('rteLocale').getConstant('fontName') : fontNameItems[0].text :
206
209
  e.parent.fontFamily.default;
207
210
  var name_1 = (isNOU(result) ? fontNameContent : result) === 'Default' ? self.serviceLocator.getService('rteLocale').getConstant('fontName')
208
211
  : (isNOU(result) ? fontNameContent : result);
@@ -219,9 +222,9 @@ export function setToolbarStatus(e, isPopToolbar, self) {
219
222
  break;
220
223
  }
221
224
  var fontSizeItems = e.parent.fontSize.items;
222
- var fontSizeContent = isNOU(e.parent.fontSize.default) ? fontSizeItems[0].text :
225
+ var fontSizeContent = isNOU(e.parent.fontSize.default) ? (fontSizeItems.length === 0) ? self.serviceLocator.getService('rteLocale').getConstant('fontSize') : fontSizeItems[0].text :
223
226
  e.parent.fontSize.default;
224
- var fontSizeToolbarText = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\s/g, '') : value), (fontSizeContent.replace(/\s/g, '') === fontSizeItems[0].text && value === '') ? 'text' : 'value', 'text');
227
+ var fontSizeToolbarText = getDropDownValue(fontSizeItems, (value === '' ? fontSizeContent.replace(/\s/g, '') : value), (fontSizeItems.length > 0 && fontSizeItems[0] && fontSizeContent.replace(/\s/g, '') === fontSizeItems[0].text && value === '') ? 'text' : 'value', 'text');
225
228
  result = value === 'empty' ? '' : (fontSizeToolbarText === 'Default') ? self.serviceLocator.getService('rteLocale').getConstant('fontSize') : fontSizeToolbarText;
226
229
  dropDown.fontSizeDropDown.content = ('<span style="display: inline-flex;' +
227
230
  'width:' + e.parent.fontSize.width + '" >' +
@@ -360,11 +360,11 @@ export var formatsLocale = [
360
360
  export var numberFormatListLocale = [
361
361
  { locale: 'numberFormatListNone', value: 'none' },
362
362
  { locale: 'numberFormatListNumber', value: 'decimal' },
363
- { locale: 'numberFormatListLowerAlpha', value: 'lower-alpha' },
364
- { locale: 'numberFormatListUpperAlpha', value: 'upper-alpha' },
365
- { locale: 'numberFormatListLowerRoman', value: 'lower-roman' },
366
- { locale: 'numberFormatListUpperRoman', value: 'upper-roman' },
367
- { locale: 'numberFormatListLowerGreek', value: 'lower-greek' }
363
+ { locale: 'numberFormatListLowerAlpha', value: 'lowerAlpha' },
364
+ { locale: 'numberFormatListUpperAlpha', value: 'upperAlpha' },
365
+ { locale: 'numberFormatListLowerRoman', value: 'lowerRoman' },
366
+ { locale: 'numberFormatListUpperRoman', value: 'upperRoman' },
367
+ { locale: 'numberFormatListLowerGreek', value: 'lowerGreek' }
368
368
  ];
369
369
  export var bulletFormatListLocale = [
370
370
  { locale: 'bulletFormatListNone', value: 'none' },
@@ -1829,9 +1829,17 @@ var Image = /** @class */ (function () {
1829
1829
  }
1830
1830
  };
1831
1831
  proxy.inputUrl.setAttribute('disabled', 'true');
1832
- if (isNOU(proxy.parent.insertImageSettings.saveUrl) && _this.isAllowedTypes
1833
- && !isNOU(_this.dialogObj) && selectArgs.filesData[0].size <= _this.uploadObj.maxFileSize) {
1834
- _this.dialogObj.getButtons(0).element.removeAttribute('disabled');
1832
+ if (!isNOU(_this.dialogObj)) {
1833
+ var button = _this.dialogObj.getButtons(0);
1834
+ if (!isNOU(button)) {
1835
+ if (isNOU(proxy.parent.insertImageSettings.saveUrl) && _this.isAllowedTypes
1836
+ && selectArgs.filesData[0].size <= _this.uploadObj.maxFileSize) {
1837
+ button.element.removeAttribute('disabled');
1838
+ }
1839
+ else {
1840
+ button.element.setAttribute('disabled', 'true');
1841
+ }
1842
+ }
1835
1843
  }
1836
1844
  });
1837
1845
  reader_1.readAsDataURL(selectArgs.filesData[0].rawFile);
@@ -227,7 +227,7 @@ var ToolbarRenderer = /** @class */ (function () {
227
227
  alignEle = alignEle.parentElement;
228
228
  }
229
229
  var alignStyle = window.getComputedStyle(alignEle).textAlign;
230
- if (args.items[0].command === 'Alignments') {
230
+ if (!isNOU(args.items[0]) && args.items[0].command === 'Alignments') {
231
231
  if ((args.items[0].text === 'Align Left' && (alignStyle === 'left') || alignStyle === 'start')) {
232
232
  addClass([args.element.childNodes[0]], 'e-active');
233
233
  break;
@@ -250,7 +250,7 @@ var ToolbarRenderer = /** @class */ (function () {
250
250
  //image preselect
251
251
  var closestNode = startNode.closest('img');
252
252
  var imageEle = closestNode ? closestNode : startNode.querySelector('img');
253
- if (args.items[0].command === 'Images') {
253
+ if (!isNOU(args.items[0]) && args.items[0].command === 'Images') {
254
254
  if (!isNOU(imageEle)) {
255
255
  var index = void 0;
256
256
  if (imageEle.classList.contains('e-imgleft') || imageEle.classList.contains('e-imginline')) {
@@ -268,7 +268,7 @@ var ToolbarRenderer = /** @class */ (function () {
268
268
  }
269
269
  }
270
270
  //Formats preselect
271
- if (args.items[0].command === 'Formats' || args.items[0].command === 'Font') {
271
+ if (!isNOU(args.items[0]) && (args.items[0].command === 'Formats' || args.items[0].command === 'Font')) {
272
272
  var fontName_1 = [];
273
273
  var formats_1 = [];
274
274
  var hasUpdatedActive = false;