jodit 4.2.14 → 4.2.15

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.
Files changed (79) hide show
  1. package/es2015/jodit.css +115 -115
  2. package/es2015/jodit.fat.min.css +1 -1
  3. package/es2015/jodit.fat.min.js +2 -2
  4. package/es2015/jodit.js +525 -444
  5. package/es2015/jodit.min.css +1 -1
  6. package/es2015/jodit.min.js +2 -2
  7. package/es2015/plugins/debug/debug.js +1 -1
  8. package/es2015/plugins/debug/debug.min.js +1 -1
  9. package/es2015/plugins/speech-recognize/speech-recognize.css +1 -1
  10. package/es2015/plugins/speech-recognize/speech-recognize.js +1 -1
  11. package/es2015/plugins/speech-recognize/speech-recognize.min.js +1 -1
  12. package/es2018/jodit.css +115 -115
  13. package/es2018/jodit.fat.min.css +1 -1
  14. package/es2018/jodit.fat.min.js +2 -2
  15. package/es2018/jodit.js +525 -444
  16. package/es2018/jodit.min.css +1 -1
  17. package/es2018/jodit.min.js +2 -2
  18. package/es2018/plugins/debug/debug.js +1 -1
  19. package/es2018/plugins/debug/debug.min.js +1 -1
  20. package/es2018/plugins/speech-recognize/speech-recognize.css +1 -1
  21. package/es2018/plugins/speech-recognize/speech-recognize.js +1 -1
  22. package/es2018/plugins/speech-recognize/speech-recognize.min.js +1 -1
  23. package/es2021/jodit.css +115 -115
  24. package/es2021/jodit.fat.min.css +1 -1
  25. package/es2021/jodit.fat.min.js +2 -2
  26. package/es2021/jodit.js +519 -440
  27. package/es2021/jodit.min.css +1 -1
  28. package/es2021/jodit.min.js +2 -2
  29. package/es2021/plugins/debug/debug.js +1 -1
  30. package/es2021/plugins/debug/debug.min.js +1 -1
  31. package/es2021/plugins/speech-recognize/speech-recognize.css +1 -1
  32. package/es2021/plugins/speech-recognize/speech-recognize.js +1 -1
  33. package/es2021/plugins/speech-recognize/speech-recognize.min.js +1 -1
  34. package/es2021.en/jodit.css +115 -115
  35. package/es2021.en/jodit.fat.min.css +1 -1
  36. package/es2021.en/jodit.fat.min.js +2 -2
  37. package/es2021.en/jodit.js +519 -440
  38. package/es2021.en/jodit.min.css +1 -1
  39. package/es2021.en/jodit.min.js +2 -2
  40. package/es2021.en/plugins/debug/debug.js +1 -1
  41. package/es2021.en/plugins/debug/debug.min.js +1 -1
  42. package/es2021.en/plugins/speech-recognize/speech-recognize.css +1 -1
  43. package/es2021.en/plugins/speech-recognize/speech-recognize.js +1 -1
  44. package/es2021.en/plugins/speech-recognize/speech-recognize.min.js +1 -1
  45. package/es5/jodit.css +129 -129
  46. package/es5/jodit.fat.min.css +1 -1
  47. package/es5/jodit.fat.min.js +2 -2
  48. package/es5/jodit.js +542 -460
  49. package/es5/jodit.min.css +3 -3
  50. package/es5/jodit.min.js +2 -2
  51. package/es5/plugins/debug/debug.js +1 -1
  52. package/es5/plugins/debug/debug.min.js +1 -1
  53. package/es5/plugins/speech-recognize/speech-recognize.css +1 -1
  54. package/es5/plugins/speech-recognize/speech-recognize.js +1 -1
  55. package/es5/plugins/speech-recognize/speech-recognize.min.js +1 -1
  56. package/esm/core/constants.js +1 -1
  57. package/esm/core/selection/helpers/index.d.ts +9 -3
  58. package/esm/core/selection/helpers/index.js +48 -0
  59. package/esm/core/selection/selection.d.ts +6 -1
  60. package/esm/core/selection/selection.js +95 -117
  61. package/esm/index.d.ts +6 -1
  62. package/esm/index.js +3 -2
  63. package/esm/modules/table/table.d.ts +3 -1
  64. package/esm/modules/table/table.js +38 -33
  65. package/esm/modules/uploader/helpers/send-files.js +33 -29
  66. package/esm/plugins/backspace/cases/check-remove-char.js +65 -55
  67. package/esm/plugins/drag-and-drop/drag-and-drop.d.ts +2 -0
  68. package/esm/plugins/drag-and-drop/drag-and-drop.js +43 -36
  69. package/esm/plugins/link/link.js +71 -64
  70. package/esm/plugins/search/helpers/highlight-text-ranges.d.ts +0 -4
  71. package/esm/plugins/search/helpers/highlight-text-ranges.js +58 -49
  72. package/esm/plugins/table-keyboard-navigation/table-keyboard-navigation.js +35 -29
  73. package/package.json +1 -1
  74. package/types/core/selection/helpers/index.d.ts +9 -3
  75. package/types/core/selection/selection.d.ts +6 -1
  76. package/types/index.d.ts +6 -1
  77. package/types/modules/table/table.d.ts +3 -1
  78. package/types/plugins/drag-and-drop/drag-and-drop.d.ts +2 -0
  79. package/types/plugins/search/helpers/highlight-text-ranges.d.ts +0 -4
package/es2021/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit - Jodit is an awesome and useful wysiwyg editor with filebrowser
3
3
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/jodit/)
4
- * Version: v4.2.14
4
+ * Version: v4.2.15
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1737,7 +1737,7 @@ __webpack_require__.r(__webpack_exports__);
1737
1737
  * Released under MIT see LICENSE.txt in the project root for license information.
1738
1738
  * Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
1739
1739
  */
1740
- const APP_VERSION = "4.2.14";
1740
+ const APP_VERSION = "4.2.15";
1741
1741
  // prettier-ignore
1742
1742
  const ES = "es2021";
1743
1743
  const IS_ES_MODERN = true;
@@ -9823,10 +9823,14 @@ class Response {
9823
9823
 
9824
9824
  "use strict";
9825
9825
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9826
- /* harmony export */ W: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__.W; }
9826
+ /* harmony export */ Qe: function() { return /* binding */ cursorInTheEdgeOfString; },
9827
+ /* harmony export */ W8: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__.W; },
9828
+ /* harmony export */ dY: function() { return /* binding */ findCorrectCurrentNode; }
9827
9829
  /* harmony export */ });
9828
- /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5298);
9829
- /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83541);
9830
+ /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9831
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55186);
9832
+ /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5298);
9833
+ /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(83541);
9830
9834
  /*!
9831
9835
  * Jodit Editor (https://xdsoft.net/jodit/)
9832
9836
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -9839,6 +9843,54 @@ class Response {
9839
9843
 
9840
9844
 
9841
9845
 
9846
+ /**
9847
+ * Check if the cursor is at the edge of the string
9848
+ * @private
9849
+ */
9850
+ function cursorInTheEdgeOfString(container, offset, start, end) {
9851
+ const text = container.nodeValue?.length ? container.nodeValue : '';
9852
+ if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
9853
+ return true;
9854
+ }
9855
+ const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
9856
+ return start && ((inv && inv[0].length < offset) || (!inv && offset > 0));
9857
+ }
9858
+ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild, child) {
9859
+ node = range.startContainer.childNodes[range.startOffset];
9860
+ if (!node) {
9861
+ node = range.startContainer.childNodes[range.startOffset - 1];
9862
+ rightMode = true;
9863
+ }
9864
+ if (node && isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9865
+ // test Current method - Cursor in the left of some SPAN
9866
+ if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node.previousSibling)) {
9867
+ node = node.previousSibling;
9868
+ }
9869
+ else if (checkChild) {
9870
+ let current = child(node);
9871
+ while (current) {
9872
+ if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current)) {
9873
+ node = current;
9874
+ break;
9875
+ }
9876
+ current = child(current);
9877
+ }
9878
+ }
9879
+ }
9880
+ if (node && !isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9881
+ let leftChild = node, rightChild = node;
9882
+ do {
9883
+ leftChild = leftChild.firstChild;
9884
+ rightChild = rightChild.lastChild;
9885
+ } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild));
9886
+ if (leftChild === rightChild && leftChild && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild)) {
9887
+ node = leftChild;
9888
+ }
9889
+ }
9890
+ return { node, rightMode };
9891
+ }
9892
+
9893
+
9842
9894
  /***/ }),
9843
9895
 
9844
9896
  /***/ 5298:
@@ -9959,7 +10011,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9959
10011
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9960
10012
  /* harmony export */ L: function() { return /* binding */ Selection; }
9961
10013
  /* harmony export */ });
9962
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(31635);
10014
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(31635);
9963
10015
  /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9964
10016
  /* harmony import */ var jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22664);
9965
10017
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55186);
@@ -9969,6 +10021,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9969
10021
  /* harmony import */ var jodit_core_helpers_utils_assert__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(jodit_core_helpers_utils_assert__WEBPACK_IMPORTED_MODULE_5__);
9970
10022
  /* harmony import */ var jodit_core_selection_helpers_move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83541);
9971
10023
  /* harmony import */ var _style_commit_style__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8757);
10024
+ /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(46602);
9972
10025
  /*!
9973
10026
  * Jodit Editor (https://xdsoft.net/jodit/)
9974
10027
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -9985,6 +10038,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9985
10038
 
9986
10039
 
9987
10040
 
10041
+
9988
10042
  class Selection {
9989
10043
  constructor(jodit) {
9990
10044
  this.jodit = jodit;
@@ -10367,63 +10421,35 @@ class Selection {
10367
10421
  * Returns the current element under the cursor inside editor
10368
10422
  */
10369
10423
  current(checkChild = true) {
10370
- if (this.j.getRealMode() === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10371
- const sel = this.sel;
10372
- if (!sel || sel.rangeCount === 0) {
10373
- return null;
10374
- }
10375
- const range = sel.getRangeAt(0);
10376
- let node = range.startContainer, rightMode = false;
10377
- const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10378
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10379
- return node;
10380
- }
10381
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10382
- node = range.startContainer.childNodes[range.startOffset];
10383
- if (!node) {
10384
- node =
10385
- range.startContainer.childNodes[range.startOffset - 1];
10386
- rightMode = true;
10387
- }
10388
- if (node && sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10389
- // test Current method - Cursor in the left of some SPAN
10390
- if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node.previousSibling)) {
10391
- node = node.previousSibling;
10392
- }
10393
- else if (checkChild) {
10394
- let current = child(node);
10395
- while (current) {
10396
- if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(current)) {
10397
- node = current;
10398
- break;
10399
- }
10400
- current = child(current);
10401
- }
10402
- }
10403
- }
10404
- if (node && !sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10405
- let leftChild = node, rightChild = node;
10406
- do {
10407
- leftChild = leftChild.firstChild;
10408
- rightChild = rightChild.lastChild;
10409
- } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild));
10410
- if (leftChild === rightChild &&
10411
- leftChild &&
10412
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild)) {
10413
- node = leftChild;
10414
- }
10415
- }
10416
- }
10417
- // check - cursor inside editor
10418
- if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10419
- return node;
10420
- }
10424
+ if (this.j.getRealMode() !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10425
+ return null;
10426
+ }
10427
+ const sel = this.sel;
10428
+ if (!sel || sel.rangeCount === 0) {
10429
+ return null;
10430
+ }
10431
+ const range = sel.getRangeAt(0);
10432
+ let node = range.startContainer;
10433
+ let rightMode = false;
10434
+ const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10435
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10436
+ return node;
10437
+ }
10438
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10439
+ const ret = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .findCorrectCurrentNode */ .dY)(node, range, rightMode, sel.isCollapsed, checkChild, child);
10440
+ node = ret.node;
10441
+ rightMode = ret.rightMode;
10442
+ }
10443
+ // check - cursor inside editor
10444
+ if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10445
+ return node;
10421
10446
  }
10422
10447
  return null;
10423
10448
  }
10424
10449
  /**
10425
10450
  * Insert element in editor
10426
10451
  *
10452
+ * @param node - Node for insert
10427
10453
  * @param insertCursorAfter - After insert, cursor will move after element
10428
10454
  * @param fireChange - After insert, editor fire change event. You can prevent this behavior
10429
10455
  */
@@ -10485,6 +10511,7 @@ class Selection {
10485
10511
  * Inserts in the current cursor position some HTML snippet
10486
10512
  *
10487
10513
  * @param html - HTML The text to be inserted into the document
10514
+ * @param insertCursorAfter - After insert, cursor will move after element
10488
10515
  * @example
10489
10516
  * ```javascript
10490
10517
  * parent.s.insertHTML('<img src="image.png"/>');
@@ -10528,6 +10555,7 @@ class Selection {
10528
10555
  *
10529
10556
  * @param url - URL for image, or HTMLImageElement
10530
10557
  * @param styles - If specified, it will be applied <code>$(image).css(styles)</code>
10558
+ * @param defaultWidth - If specified, it will be applied <code>css('width', defaultWidth)</code>
10531
10559
  */
10532
10560
  insertImage(url, styles = null, defaultWidth = null) {
10533
10561
  const image = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isString */ .Kg)(url) ? this.j.createInside.element('img') : url;
@@ -10582,74 +10610,81 @@ class Selection {
10582
10610
  */
10583
10611
  eachSelection(callback) {
10584
10612
  const sel = this.sel;
10585
- if (sel && sel.rangeCount) {
10586
- const range = sel.getRangeAt(0);
10587
- let root = range.commonAncestorContainer;
10588
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10589
- root = root.parentElement;
10590
- }
10591
- const nodes = [], startOffset = range.startOffset, length = root.childNodes.length, elementOffset = startOffset < length ? startOffset : length - 1;
10592
- let start = range.startContainer === this.area
10593
- ? root.childNodes[elementOffset]
10594
- : range.startContainer, end = range.endContainer === this.area
10595
- ? root.childNodes[range.endOffset - 1]
10596
- : range.endContainer;
10597
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10598
- start === range.startContainer &&
10599
- range.startOffset === start.nodeValue?.length &&
10600
- start.nextSibling) {
10601
- start = start.nextSibling;
10602
- }
10603
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10604
- end === range.endContainer &&
10605
- range.endOffset === 0 &&
10606
- end.previousSibling) {
10607
- end = end.previousSibling;
10608
- }
10609
- const checkElm = (node) => {
10610
- if (node &&
10611
- node !== root &&
10612
- !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10613
- !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10614
- nodes.push(node);
10615
- }
10616
- };
10617
- checkElm(start);
10618
- if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10619
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10620
- checkElm(node);
10621
- // checks parentElement as well because partial selections are not equal to entire element
10622
- return (node === end ||
10623
- (node && node.contains && node.contains(end)));
10624
- }, root, true, false);
10625
- }
10626
- const forEvery = (current) => {
10627
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10628
- return;
10629
- }
10630
- if (current.nodeName.match(/^(UL|OL)$/)) {
10631
- return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10613
+ if (!sel || !sel.rangeCount) {
10614
+ return;
10615
+ }
10616
+ const range = sel.getRangeAt(0);
10617
+ let root = range.commonAncestorContainer;
10618
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10619
+ root = root.parentElement;
10620
+ }
10621
+ const nodes = [];
10622
+ const startOffset = range.startOffset;
10623
+ const length = root.childNodes.length;
10624
+ const elementOffset = startOffset < length ? startOffset : length - 1;
10625
+ let start = range.startContainer === this.area
10626
+ ? root.childNodes[elementOffset]
10627
+ : range.startContainer;
10628
+ let end = range.endContainer === this.area
10629
+ ? root.childNodes[range.endOffset - 1]
10630
+ : range.endContainer;
10631
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10632
+ start === range.startContainer &&
10633
+ range.startOffset === start.nodeValue?.length &&
10634
+ start.nextSibling) {
10635
+ start = start.nextSibling;
10636
+ }
10637
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10638
+ end === range.endContainer &&
10639
+ range.endOffset === 0 &&
10640
+ end.previousSibling) {
10641
+ end = end.previousSibling;
10642
+ }
10643
+ const checkElm = (node) => {
10644
+ if (node &&
10645
+ node !== root &&
10646
+ !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10647
+ !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10648
+ nodes.push(node);
10649
+ }
10650
+ };
10651
+ checkElm(start);
10652
+ if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10653
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10654
+ checkElm(node);
10655
+ // checks parentElement as well because partial selections are not equal to entire element
10656
+ return (node === end ||
10657
+ (node && node.contains && node.contains(end)));
10658
+ }, root, true, false);
10659
+ }
10660
+ const forEvery = (current) => {
10661
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10662
+ return;
10663
+ }
10664
+ if (current.nodeName.match(/^(UL|OL)$/)) {
10665
+ return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10666
+ }
10667
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10668
+ if (current.firstChild) {
10669
+ current = current.firstChild;
10632
10670
  }
10633
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10634
- if (current.firstChild) {
10635
- current = current.firstChild;
10636
- }
10637
- else {
10638
- const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10639
- current.appendChild(currentB);
10640
- current = currentB;
10641
- }
10671
+ else {
10672
+ const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10673
+ current.appendChild(currentB);
10674
+ current = currentB;
10642
10675
  }
10643
- callback(current);
10644
- };
10645
- if (nodes.length === 0 && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10676
+ }
10677
+ callback(current);
10678
+ };
10679
+ if (nodes.length === 0) {
10680
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10646
10681
  nodes.push(start);
10647
10682
  }
10648
- if (nodes.length === 0 && start.firstChild) {
10683
+ if (start.firstChild) {
10649
10684
  nodes.push(start.firstChild);
10650
10685
  }
10651
- nodes.forEach(forEvery);
10652
10686
  }
10687
+ nodes.forEach(forEvery);
10653
10688
  }
10654
10689
  /**
10655
10690
  * Checks if the cursor is at the end(start) block
@@ -10676,13 +10711,7 @@ class Selection {
10676
10711
  this.j.e.fire('isInvisibleForCursor', elm) === true));
10677
10712
  // check right offset
10678
10713
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(container)) {
10679
- const text = container.nodeValue?.length ? container.nodeValue : '';
10680
- if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
10681
- return false;
10682
- }
10683
- const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
10684
- if (start &&
10685
- ((inv && inv[0].length < offset) || (!inv && offset > 0))) {
10714
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .cursorInTheEdgeOfString */ .Qe)(container, offset, start, end)) {
10686
10715
  return false;
10687
10716
  }
10688
10717
  }
@@ -10770,6 +10799,7 @@ class Selection {
10770
10799
  }
10771
10800
  /**
10772
10801
  * Set cursor in the node
10802
+ * @param node - Node element
10773
10803
  * @param inStart - set cursor in start of element
10774
10804
  */
10775
10805
  setCursorIn(node, inStart = false) {
@@ -10830,6 +10860,7 @@ class Selection {
10830
10860
  }
10831
10861
  /**
10832
10862
  * Select node
10863
+ * @param node - Node element
10833
10864
  * @param inward - select all inside
10834
10865
  */
10835
10866
  select(node, inward = false) {
@@ -11103,19 +11134,19 @@ class Selection {
11103
11134
  return this;
11104
11135
  }
11105
11136
  }
11106
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11137
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11107
11138
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11108
11139
  ], Selection.prototype, "createRange", null);
11109
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11140
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11110
11141
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11111
11142
  ], Selection.prototype, "focus", null);
11112
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11143
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11113
11144
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11114
11145
  ], Selection.prototype, "setCursorAfter", null);
11115
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11146
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11116
11147
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11117
11148
  ], Selection.prototype, "setCursorBefore", null);
11118
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11149
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11119
11150
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11120
11151
  ], Selection.prototype, "setCursorIn", null);
11121
11152
 
@@ -22294,6 +22325,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22294
22325
  }
22295
22326
  /**
22296
22327
  * Generate formal table martix columns*rows
22328
+ * @param table - Working table
22297
22329
  * @param callback - if return false cycle break
22298
22330
  */
22299
22331
  formalMatrix(table, callback) {
@@ -22362,7 +22394,6 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22362
22394
  * @param line - Insert a new line after/before this
22363
22395
  * line contains the selected cell
22364
22396
  * @param after - Insert a new line after line contains the selected cell
22365
- * @param create - Instance of Create class
22366
22397
  */
22367
22398
  appendRow(table, line, after) {
22368
22399
  return Table.__appendRow(table, line, after, this.j.createInside);
@@ -22531,13 +22562,36 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22531
22562
  return Table.__getSelectedBound(table, selectedCells);
22532
22563
  }
22533
22564
  static __normalizeTable(table) {
22534
- let i, j, min, not;
22535
22565
  const __marked = [], box = Table.__formalMatrix(table);
22536
- // remove extra colspans
22537
- for (j = 0; j < box[0].length; j += 1) {
22538
- min = 1000000;
22539
- not = false;
22540
- for (i = 0; i < box.length; i += 1) {
22566
+ Table.__removeExtraColspans(box, __marked);
22567
+ Table.__removeExtraRowspans(box, __marked);
22568
+ // remove rowspans and colspans equal 1 and empty class
22569
+ for (let i = 0; i < box.length; i += 1) {
22570
+ for (let j = 0; j < box[i].length; j += 1) {
22571
+ if (box[i][j] === undefined) {
22572
+ continue; // broken table
22573
+ }
22574
+ if (box[i][j].hasAttribute('rowspan') &&
22575
+ box[i][j].rowSpan === 1) {
22576
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22577
+ }
22578
+ if (box[i][j].hasAttribute('colspan') &&
22579
+ box[i][j].colSpan === 1) {
22580
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22581
+ }
22582
+ if (box[i][j].hasAttribute('class') &&
22583
+ !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22584
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22585
+ }
22586
+ }
22587
+ }
22588
+ Table.__unmark(__marked);
22589
+ }
22590
+ static __removeExtraColspans(box, __marked) {
22591
+ for (let j = 0; j < box[0].length; j += 1) {
22592
+ let min = 1000000;
22593
+ let not = false;
22594
+ for (let i = 0; i < box.length; i += 1) {
22541
22595
  if (box[i][j] === undefined) {
22542
22596
  continue; // broken table
22543
22597
  }
@@ -22548,7 +22602,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22548
22602
  min = Math.min(min, box[i][j].colSpan);
22549
22603
  }
22550
22604
  if (!not) {
22551
- for (i = 0; i < box.length; i += 1) {
22605
+ for (let i = 0; i < box.length; i += 1) {
22552
22606
  if (box[i][j] === undefined) {
22553
22607
  continue; // broken table
22554
22608
  }
@@ -22556,10 +22610,13 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22556
22610
  }
22557
22611
  }
22558
22612
  }
22559
- // remove extra rowspans
22613
+ }
22614
+ static __removeExtraRowspans(box, marked) {
22615
+ let i = 0;
22616
+ let j = 0;
22560
22617
  for (i = 0; i < box.length; i += 1) {
22561
- min = 1000000;
22562
- not = false;
22618
+ let min = 1000000;
22619
+ let not = false;
22563
22620
  for (j = 0; j < box[i].length; j += 1) {
22564
22621
  if (box[i][j] === undefined) {
22565
22622
  continue; // broken table
@@ -22575,31 +22632,10 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22575
22632
  if (box[i][j] === undefined) {
22576
22633
  continue; // broken table
22577
22634
  }
22578
- Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, __marked);
22635
+ Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, marked);
22579
22636
  }
22580
22637
  }
22581
22638
  }
22582
- // remove rowspans and colspans equal 1 and empty class
22583
- for (i = 0; i < box.length; i += 1) {
22584
- for (j = 0; j < box[i].length; j += 1) {
22585
- if (box[i][j] === undefined) {
22586
- continue; // broken table
22587
- }
22588
- if (box[i][j].hasAttribute('rowspan') &&
22589
- box[i][j].rowSpan === 1) {
22590
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22591
- }
22592
- if (box[i][j].hasAttribute('colspan') &&
22593
- box[i][j].colSpan === 1) {
22594
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22595
- }
22596
- if (box[i][j].hasAttribute('class') &&
22597
- !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22598
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22599
- }
22600
- }
22601
- }
22602
- Table.__unmark(__marked);
22603
22639
  }
22604
22640
  /**
22605
22641
  * Try recalculate all coluns and rows after change
@@ -24017,34 +24053,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24017
24053
  }
24018
24054
  const promises = [];
24019
24055
  if (o.insertImageAsBase64URI) {
24020
- let file, i;
24021
- for (i = 0; i < fileList.length; i += 1) {
24022
- file = fileList[i];
24023
- if (file && file.type) {
24024
- const mime = file.type.match(/\/([a-z0-9]+)/i);
24025
- const extension = mime[1] ? mime[1].toLowerCase() : '';
24026
- if (o.imagesExtensions.includes(extension)) {
24027
- const reader = new FileReader();
24028
- promises.push(uploader.j.async.promise((resolve, reject) => {
24029
- reader.onerror = reject;
24030
- reader.onloadend = () => {
24031
- const resp = {
24032
- baseurl: '',
24033
- files: [reader.result],
24034
- isImages: [true]
24035
- };
24036
- const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24037
- ? handlerSuccess
24038
- : o.defaultHandlerSuccess;
24039
- handler.call(uploader, resp);
24040
- resolve(resp);
24041
- };
24042
- reader.readAsDataURL(file);
24043
- }));
24044
- fileList[i] = null;
24045
- }
24046
- }
24047
- }
24056
+ readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
24048
24057
  }
24049
24058
  fileList = fileList.filter(a => a);
24050
24059
  if (fileList.length) {
@@ -24055,7 +24064,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24055
24064
  for (let i = 0; i < fileList.length; i += 1) {
24056
24065
  file = fileList[i];
24057
24066
  if (file) {
24058
- const hasRealExtension = /\.[\d\w]+$/.test(file.name);
24067
+ const hasRealExtension = /\.\w+$/.test(file.name);
24059
24068
  const mime = file.type.match(/\/([a-z0-9]+)/i);
24060
24069
  const extension = mime && mime[1] ? mime[1].toLowerCase() : '';
24061
24070
  let newName = fileList[i].name ||
@@ -24104,6 +24113,37 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24104
24113
  }
24105
24114
  return Promise.all(promises);
24106
24115
  }
24116
+ function readImagesWithReader(fileList, imagesExtensions, promises, uploader, handlerSuccess, defaultHandlerSuccess) {
24117
+ let file, i;
24118
+ for (i = 0; i < fileList.length; i += 1) {
24119
+ file = fileList[i];
24120
+ if (file && file.type) {
24121
+ const mime = file.type.match(/\/([a-z0-9]+)/i);
24122
+ const extension = mime[1] ? mime[1].toLowerCase() : '';
24123
+ if (!imagesExtensions.includes(extension)) {
24124
+ continue;
24125
+ }
24126
+ const reader = new FileReader();
24127
+ promises.push(uploader.j.async.promise((resolve, reject) => {
24128
+ reader.onerror = reject;
24129
+ reader.onloadend = () => {
24130
+ const resp = {
24131
+ baseurl: '',
24132
+ files: [reader.result],
24133
+ isImages: [true]
24134
+ };
24135
+ const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24136
+ ? handlerSuccess
24137
+ : defaultHandlerSuccess;
24138
+ handler.call(uploader, resp);
24139
+ resolve(resp);
24140
+ };
24141
+ reader.readAsDataURL(file);
24142
+ }));
24143
+ fileList[i] = null;
24144
+ }
24145
+ }
24146
+ }
24107
24147
 
24108
24148
 
24109
24149
  /***/ }),
@@ -25722,7 +25762,7 @@ class backspace extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_3__/* .Plugin
25722
25762
  if (jodit.e.fire('backSpaceBeforeCases', backspace, fakeNode)) {
25723
25763
  return false;
25724
25764
  }
25725
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
25765
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
25726
25766
  if (_cases__WEBPACK_IMPORTED_MODULE_6__/* .cases */ .C.some((func) => {
25727
25767
  if ((0,jodit_core_helpers_checker_is_function__WEBPACK_IMPORTED_MODULE_8__/* .isFunction */ .T)(func) &&
25728
25768
  func(jodit, fakeNode, backspace, mode)) {
@@ -25982,19 +26022,12 @@ function checkNotCollapsed(jodit) {
25982
26022
  function checkRemoveChar(jodit, fakeNode, backspace, mode) {
25983
26023
  const step = backspace ? -1 : 1;
25984
26024
  const anotherSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, !backspace);
25985
- let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace), removeNeighbor = null;
25986
- let charRemoved = false, removed;
25987
- const getNextInlineSibling = (sibling) => {
25988
- let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
25989
- if (!nextSibling &&
25990
- sibling.parentNode &&
25991
- sibling.parentNode !== jodit.editor) {
25992
- nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, jodit.editor, true);
25993
- }
25994
- return nextSibling;
25995
- };
26025
+ let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace);
26026
+ let removeNeighbor = null;
26027
+ let charRemoved = false;
26028
+ let removed;
25996
26029
  if (!sibling) {
25997
- sibling = getNextInlineSibling(fakeNode);
26030
+ sibling = getNextInlineSibling(fakeNode, backspace, jodit.editor);
25998
26031
  }
25999
26032
  while (sibling && (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(sibling) || jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling))) {
26000
26033
  while (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling)) {
@@ -26004,57 +26037,17 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26004
26037
  break;
26005
26038
  }
26006
26039
  if (sibling.nodeValue?.length) {
26007
- // For Unicode escapes
26008
- let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26009
- const length = value.length;
26010
- let index = backspace ? length - 1 : 0;
26011
- if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26012
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26013
- index += step;
26014
- }
26015
- }
26016
- removed = value[index];
26017
- if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26018
- index += step;
26019
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26020
- index += step;
26021
- }
26022
- index += backspace ? 1 : -1;
26023
- }
26024
- if (backspace && index < 0) {
26025
- value = [];
26026
- }
26027
- else {
26028
- value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26029
- }
26030
- if (!anotherSibling ||
26031
- !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26032
- (!backspace ? / $/ : /^ /).test(anotherSibling.nodeValue ?? '') ||
26033
- !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26034
- for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26035
- if (value[i] === ' ') {
26036
- value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26037
- }
26038
- else {
26039
- break;
26040
- }
26041
- }
26042
- }
26043
- sibling.nodeValue = value.join('');
26040
+ removed = tryRemoveChar(sibling, backspace, step, anotherSibling);
26044
26041
  }
26045
26042
  if (!sibling.nodeValue?.length) {
26046
26043
  removeNeighbor = sibling;
26047
26044
  }
26048
26045
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.isVoid)(removed) && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26046
+ checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit);
26049
26047
  charRemoved = true;
26050
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.call)(backspace ? jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after : jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.before, sibling, fakeNode);
26051
- if (mode === 'sentence' ||
26052
- (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26053
- checkRemoveChar(jodit, fakeNode, backspace, mode);
26054
- }
26055
26048
  break;
26056
26049
  }
26057
- const nextSibling = getNextInlineSibling(sibling);
26050
+ const nextSibling = getNextInlineSibling(sibling, backspace, jodit.editor);
26058
26051
  if (removeNeighbor) {
26059
26052
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.safeRemove(removeNeighbor);
26060
26053
  removeNeighbor = null;
@@ -26076,6 +26069,13 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26076
26069
  }
26077
26070
  return charRemoved;
26078
26071
  }
26072
+ function getNextInlineSibling(sibling, backspace, root) {
26073
+ let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
26074
+ if (!nextSibling && sibling.parentNode && sibling.parentNode !== root) {
26075
+ nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, root, true);
26076
+ }
26077
+ return nextSibling;
26078
+ }
26079
26079
  /**
26080
26080
  * Helper removes all empty inline parents
26081
26081
  */
@@ -26100,6 +26100,56 @@ function addBRInsideEmptyBlock(jodit, node) {
26100
26100
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after(node, jodit.createInside.element('br'));
26101
26101
  }
26102
26102
  }
26103
+ function tryRemoveChar(sibling, backspace, step, anotherSibling) {
26104
+ // For Unicode escapes
26105
+ let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26106
+ const length = value.length;
26107
+ let index = backspace ? length - 1 : 0;
26108
+ if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26109
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26110
+ index += step;
26111
+ }
26112
+ }
26113
+ const removed = value[index];
26114
+ if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26115
+ index += step;
26116
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26117
+ index += step;
26118
+ }
26119
+ index += backspace ? 1 : -1;
26120
+ }
26121
+ if (backspace && index < 0) {
26122
+ value = [];
26123
+ }
26124
+ else {
26125
+ value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26126
+ }
26127
+ replaceSpaceOnNBSP(anotherSibling, backspace, value);
26128
+ sibling.nodeValue = value.join('');
26129
+ return removed;
26130
+ }
26131
+ function replaceSpaceOnNBSP(anotherSibling, backspace, value) {
26132
+ if (!anotherSibling ||
26133
+ !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26134
+ (!backspace ? / $/ : /^ /).test(anotherSibling.nodeValue ?? '') ||
26135
+ !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26136
+ for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26137
+ if (value[i] === ' ') {
26138
+ value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26139
+ }
26140
+ else {
26141
+ break;
26142
+ }
26143
+ }
26144
+ }
26145
+ }
26146
+ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit) {
26147
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.call)(backspace ? jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after : jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.before, sibling, fakeNode);
26148
+ if (mode === 'sentence' ||
26149
+ (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26150
+ checkRemoveChar(jodit, fakeNode, backspace, mode);
26151
+ }
26152
+ }
26103
26153
 
26104
26154
 
26105
26155
  /***/ }),
@@ -26137,7 +26187,7 @@ function checkRemoveContentNotEditable(jodit, fakeNode, backspace) {
26137
26187
  !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isContentEditable(neighbor, jodit.editor)) {
26138
26188
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before : jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after, neighbor, fakeNode);
26139
26189
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.safeRemove(neighbor);
26140
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
26190
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
26141
26191
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit.s.setCursorBefore : jodit.s.setCursorAfter, fakeNode);
26142
26192
  return true;
26143
26193
  }
@@ -28993,45 +29043,11 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
28993
29043
  const sel = this.j.s.sel;
28994
29044
  const range = this.bufferRange ||
28995
29045
  (sel && sel.rangeCount ? sel.getRangeAt(0) : null);
28996
- let fragment = null;
28997
- if (!this.draggable && range) {
28998
- fragment = this.isCopyMode
28999
- ? range.cloneContents()
29000
- : range.extractContents();
29001
- }
29002
- else if (this.draggable) {
29003
- if (this.isCopyMode) {
29004
- const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
29005
- ? ['a', 'href']
29006
- : ['img', 'src'];
29007
- fragment = this.j.createInside.element(tagName);
29008
- fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
29009
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
29010
- '');
29011
- if (tagName === 'a') {
29012
- fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
29013
- }
29014
- }
29015
- else {
29016
- fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
29017
- }
29018
- }
29019
- else if (this.getText(event)) {
29020
- fragment = this.j.createInside.fromHTML(this.getText(event));
29021
- }
29046
+ const fragment = this.__getWorkFragment(range, event);
29022
29047
  sel && sel.removeAllRanges();
29023
29048
  this.j.s.insertCursorAtPoint(event.clientX, event.clientY);
29024
29049
  if (fragment) {
29025
- this.j.s.insertNode(fragment, false, false);
29026
- if (range && fragment.firstChild && fragment.lastChild) {
29027
- range.setStartBefore(fragment.firstChild);
29028
- range.setEndAfter(fragment.lastChild);
29029
- this.j.s.selectRange(range);
29030
- this.j.e.fire('synchro');
29031
- }
29032
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
29033
- this.j.e.fire('afterInsertImage', fragment);
29034
- }
29050
+ this.__insertFragment.call(this, fragment, range);
29035
29051
  }
29036
29052
  event.preventDefault();
29037
29053
  event.stopPropagation();
@@ -29039,6 +29055,47 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
29039
29055
  this.isFragmentFromEditor = false;
29040
29056
  this.removeDragListeners();
29041
29057
  }
29058
+ __getWorkFragment(range, event) {
29059
+ let fragment = null;
29060
+ if (!this.draggable && range) {
29061
+ fragment = this.isCopyMode
29062
+ ? range.cloneContents()
29063
+ : range.extractContents();
29064
+ }
29065
+ else if (this.draggable) {
29066
+ if (this.isCopyMode) {
29067
+ const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
29068
+ ? ['a', 'href']
29069
+ : ['img', 'src'];
29070
+ fragment = this.j.createInside.element(tagName);
29071
+ fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
29072
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
29073
+ '');
29074
+ if (tagName === 'a') {
29075
+ fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
29076
+ }
29077
+ }
29078
+ else {
29079
+ fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
29080
+ }
29081
+ }
29082
+ else if (this.getText(event)) {
29083
+ fragment = this.j.createInside.fromHTML(this.getText(event));
29084
+ }
29085
+ return fragment;
29086
+ }
29087
+ __insertFragment(fragment, range) {
29088
+ this.j.s.insertNode(fragment, false, false);
29089
+ if (range && fragment.firstChild && fragment.lastChild) {
29090
+ range.setStartBefore(fragment.firstChild);
29091
+ range.setEndAfter(fragment.lastChild);
29092
+ this.j.s.selectRange(range);
29093
+ this.j.e.fire('synchro');
29094
+ }
29095
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
29096
+ this.j.e.fire('afterInsertImage', fragment);
29097
+ }
29098
+ }
29042
29099
  /** @override */
29043
29100
  beforeDestruct() {
29044
29101
  this.onDragEnd();
@@ -34749,35 +34806,7 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34749
34806
  if (link) {
34750
34807
  url_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
34751
34808
  if (modeClassName) {
34752
- switch (modeClassName) {
34753
- case 'input':
34754
- if (className_input) {
34755
- className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34756
- }
34757
- break;
34758
- case 'select':
34759
- if (className_select) {
34760
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
34761
- const option = className_select.options.item(i);
34762
- if (option) {
34763
- option.selected = false;
34764
- }
34765
- }
34766
- const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34767
- classNames.split(' ').forEach(className => {
34768
- if (className) {
34769
- for (let i = 0; i < className_select.options.length; i++) {
34770
- const option = className_select.options.item(i);
34771
- if (option?.value &&
34772
- option.value === className) {
34773
- option.selected = true;
34774
- }
34775
- }
34776
- }
34777
- });
34778
- }
34779
- break;
34780
- }
34809
+ readClassnames(modeClassName, className_input, link, className_select);
34781
34810
  }
34782
34811
  if (openInNewTabCheckbox && target_checkbox) {
34783
34812
  target_checkbox.checked = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
@@ -34839,42 +34868,9 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34839
34868
  }
34840
34869
  links.forEach(a => {
34841
34870
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', url_input.value);
34842
- if (modeClassName && (className_input ?? className_select)) {
34843
- if (modeClassName === 'input') {
34844
- if (className_input.value === '' &&
34845
- a.hasAttribute('class')) {
34846
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34847
- }
34848
- if (className_input.value !== '') {
34849
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34850
- }
34851
- }
34852
- else if (modeClassName === 'select') {
34853
- if (a.hasAttribute('class')) {
34854
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34855
- }
34856
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
34857
- const className = className_select.selectedOptions.item(i)?.value;
34858
- if (className) {
34859
- a.classList.add(className);
34860
- }
34861
- }
34862
- }
34863
- }
34871
+ writeClasses(modeClassName, className_input, className_select, a);
34864
34872
  if (!isImageContent) {
34865
- let newContent = a.textContent;
34866
- if (content_input.value.trim().length) {
34867
- if (textWasChanged) {
34868
- newContent = content_input.value;
34869
- }
34870
- }
34871
- else {
34872
- newContent = url_input.value;
34873
- }
34874
- const content = a.textContent;
34875
- if (newContent !== content) {
34876
- a.textContent = newContent;
34877
- }
34873
+ writeImage(a, content_input, textWasChanged, url_input);
34878
34874
  }
34879
34875
  if (openInNewTabCheckbox && target_checkbox) {
34880
34876
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
@@ -34919,6 +34915,74 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34919
34915
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_0__.autobind
34920
34916
  ], link.prototype, "__generateForm", null);
34921
34917
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('link', link);
34918
+ function writeClasses(modeClassName, className_input, className_select, a) {
34919
+ if (modeClassName && (className_input ?? className_select)) {
34920
+ if (modeClassName === 'input') {
34921
+ if (className_input.value === '' && a.hasAttribute('class')) {
34922
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34923
+ }
34924
+ if (className_input.value !== '') {
34925
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34926
+ }
34927
+ }
34928
+ else if (modeClassName === 'select') {
34929
+ if (a.hasAttribute('class')) {
34930
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34931
+ }
34932
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34933
+ const className = className_select.selectedOptions.item(i)?.value;
34934
+ if (className) {
34935
+ a.classList.add(className);
34936
+ }
34937
+ }
34938
+ }
34939
+ }
34940
+ }
34941
+ function readClassnames(modeClassName, className_input, link, className_select) {
34942
+ switch (modeClassName) {
34943
+ case 'input':
34944
+ if (className_input) {
34945
+ className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34946
+ }
34947
+ break;
34948
+ case 'select':
34949
+ if (className_select) {
34950
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34951
+ const option = className_select.options.item(i);
34952
+ if (option) {
34953
+ option.selected = false;
34954
+ }
34955
+ }
34956
+ const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34957
+ classNames.split(' ').forEach(className => {
34958
+ if (className) {
34959
+ for (let i = 0; i < className_select.options.length; i++) {
34960
+ const option = className_select.options.item(i);
34961
+ if (option?.value && option.value === className) {
34962
+ option.selected = true;
34963
+ }
34964
+ }
34965
+ }
34966
+ });
34967
+ }
34968
+ break;
34969
+ }
34970
+ }
34971
+ function writeImage(a, content_input, textWasChanged, url_input) {
34972
+ let newContent = a.textContent;
34973
+ if (content_input.value.trim().length) {
34974
+ if (textWasChanged) {
34975
+ newContent = content_input.value;
34976
+ }
34977
+ }
34978
+ else {
34979
+ newContent = url_input.value;
34980
+ }
34981
+ const content = a.textContent;
34982
+ if (newContent !== content) {
34983
+ a.textContent = newContent;
34984
+ }
34985
+ }
34922
34986
 
34923
34987
 
34924
34988
  /***/ }),
@@ -37756,7 +37820,6 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__/* .Config */ .T.prototype.controls.fin
37756
37820
  /* harmony export */ _B: function() { return /* binding */ highlightTextRanges; },
37757
37821
  /* harmony export */ zy: function() { return /* binding */ getSelectionWrappers; }
37758
37822
  /* harmony export */ });
37759
- /* unused harmony export isSelectionWrapper */
37760
37823
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55186);
37761
37824
  /* harmony import */ var jodit_core_helpers_utils_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58720);
37762
37825
  /*!
@@ -37778,60 +37841,14 @@ function highlightTextRanges(jodit, rng, restRanges, ci, root) {
37778
37841
  rng.endContainer.nodeValue == null) {
37779
37842
  return;
37780
37843
  }
37781
- if (jodit.o.search.useCustomHighlightAPI &&
37782
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37783
- typeof window.Highlight !== 'undefined') {
37784
- const ranges = [rng, ...restRanges].map(rng => {
37785
- const range = jodit.selection.createRange();
37786
- range.setStart(rng.startContainer, rng.startOffset);
37787
- range.setEnd(rng.endContainer, rng.endOffset);
37788
- return range;
37789
- });
37790
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37791
- const searchHighlight = new Highlight(...ranges);
37792
- // @ts-ignore
37793
- CSS.highlights.clear();
37794
- // @ts-ignore
37795
- CSS.highlights.set('jodit-search-result', searchHighlight);
37796
- restRanges.length = 0;
37844
+ if (checkNativeSelectionMethod(jodit, rng, restRanges)) {
37797
37845
  return;
37798
37846
  }
37799
37847
  const span = ci.element('span', {
37800
37848
  [TMP_ATTR]: true
37801
37849
  });
37802
37850
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.markTemporary(span);
37803
- const startText = rng.startContainer.nodeValue;
37804
- let diff = 0;
37805
- if (rng.startOffset !== 0) {
37806
- const text = ci.text(startText.substring(0, rng.startOffset));
37807
- rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37808
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37809
- if (rng.startContainer === rng.endContainer) {
37810
- diff = rng.startOffset;
37811
- rng.endOffset -= diff;
37812
- }
37813
- rng.startOffset = 0;
37814
- }
37815
- const endText = rng.endContainer.nodeValue;
37816
- if (rng.endOffset !== endText.length) {
37817
- const text = ci.text(endText.substring(rng.endOffset));
37818
- rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37819
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37820
- for (const range of restRanges) {
37821
- if (range.startContainer === rng.endContainer) {
37822
- range.startContainer = text;
37823
- range.startOffset = range.startOffset - rng.endOffset - diff;
37824
- if (range.endContainer === rng.endContainer) {
37825
- range.endContainer = text;
37826
- range.endOffset = range.endOffset - rng.endOffset - diff;
37827
- }
37828
- }
37829
- else {
37830
- break;
37831
- }
37832
- }
37833
- rng.endOffset = rng.endContainer.nodeValue.length;
37834
- }
37851
+ normalizeRanges(rng, restRanges, ci);
37835
37852
  let next = rng.startContainer;
37836
37853
  do {
37837
37854
  if (!next) {
@@ -37877,6 +37894,61 @@ function clearSelectionWrappersFromHTML(root) {
37877
37894
  function isSelectionWrapper(node) {
37878
37895
  return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isElement(node) && node.hasAttribute(TMP_ATTR);
37879
37896
  }
37897
+ function checkNativeSelectionMethod(jodit, rng, restRanges) {
37898
+ if (jodit.o.search.useCustomHighlightAPI &&
37899
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37900
+ typeof window.Highlight !== 'undefined') {
37901
+ const ranges = [rng, ...restRanges].map(rng => {
37902
+ const range = jodit.selection.createRange();
37903
+ range.setStart(rng.startContainer, rng.startOffset);
37904
+ range.setEnd(rng.endContainer, rng.endOffset);
37905
+ return range;
37906
+ });
37907
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37908
+ const searchHighlight = new Highlight(...ranges);
37909
+ // @ts-ignore
37910
+ CSS.highlights.clear();
37911
+ // @ts-ignore
37912
+ CSS.highlights.set('jodit-search-result', searchHighlight);
37913
+ restRanges.length = 0;
37914
+ return true;
37915
+ }
37916
+ return false;
37917
+ }
37918
+ function normalizeRanges(rng, restRanges, ci) {
37919
+ const startText = rng.startContainer.nodeValue;
37920
+ let diff = 0;
37921
+ if (rng.startOffset !== 0) {
37922
+ const text = ci.text(startText.substring(0, rng.startOffset));
37923
+ rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37924
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37925
+ if (rng.startContainer === rng.endContainer) {
37926
+ diff = rng.startOffset;
37927
+ rng.endOffset -= diff;
37928
+ }
37929
+ rng.startOffset = 0;
37930
+ }
37931
+ const endText = rng.endContainer.nodeValue;
37932
+ if (rng.endOffset !== endText.length) {
37933
+ const text = ci.text(endText.substring(rng.endOffset));
37934
+ rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37935
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37936
+ for (const range of restRanges) {
37937
+ if (range.startContainer === rng.endContainer) {
37938
+ range.startContainer = text;
37939
+ range.startOffset = range.startOffset - rng.endOffset - diff;
37940
+ if (range.endContainer === rng.endContainer) {
37941
+ range.endContainer = text;
37942
+ range.endOffset = range.endOffset - rng.endOffset - diff;
37943
+ }
37944
+ }
37945
+ else {
37946
+ break;
37947
+ }
37948
+ }
37949
+ rng.endOffset = rng.endContainer.nodeValue.length;
37950
+ }
37951
+ }
37880
37952
 
37881
37953
 
37882
37954
  /***/ }),
@@ -42052,38 +42124,10 @@ function tableKeyboardNavigation(editor) {
42052
42124
  .off('.tableKeyboardNavigation')
42053
42125
  .on('keydown.tableKeyboardNavigation', (event) => {
42054
42126
  const { key } = event;
42055
- if (!WORK_KEYS.has(key)) {
42056
- return;
42057
- }
42058
- const current = editor.s.current();
42059
- if (!current) {
42060
- return;
42061
- }
42062
- const cell = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.up(current, jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isCell, editor.editor);
42127
+ const cell = findCell(editor, key);
42063
42128
  if (!cell) {
42064
42129
  return;
42065
42130
  }
42066
- const { range } = editor.s;
42067
- if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
42068
- const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
42069
- const hasNext = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.call)(!isNextDirection ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.prev : jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.next, current, elm => key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN
42070
- ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
42071
- : Boolean(elm), cell);
42072
- if ((!isNextDirection &&
42073
- (hasNext ||
42074
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
42075
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42076
- range.startOffset !== 0))) ||
42077
- (isNextDirection &&
42078
- (hasNext ||
42079
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
42080
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42081
- current.nodeValue &&
42082
- range.startOffset !==
42083
- current.nodeValue.length)))) {
42084
- return;
42085
- }
42086
- }
42087
42131
  const tableModule = editor.getInstance(jodit_modules_table_table__WEBPACK_IMPORTED_MODULE_4__/* .Table */ .X, editor.o);
42088
42132
  const table = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.closest(cell, 'table', editor.editor);
42089
42133
  let next = null;
@@ -42141,6 +42185,40 @@ function tableKeyboardNavigation(editor) {
42141
42185
  });
42142
42186
  }
42143
42187
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('tableKeyboardNavigation', tableKeyboardNavigation);
42188
+ function findCell(editor, key) {
42189
+ if (!WORK_KEYS.has(key)) {
42190
+ return;
42191
+ }
42192
+ const current = editor.s.current();
42193
+ if (!current) {
42194
+ return;
42195
+ }
42196
+ const cell = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.up(current, jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isCell, editor.editor);
42197
+ if (!cell) {
42198
+ return;
42199
+ }
42200
+ const { range } = editor.s;
42201
+ if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
42202
+ const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
42203
+ const hasNext = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.call)(!isNextDirection ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.prev : jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.next, current, elm => key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN
42204
+ ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
42205
+ : Boolean(elm), cell);
42206
+ if ((!isNextDirection &&
42207
+ (hasNext ||
42208
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
42209
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42210
+ range.startOffset !== 0))) ||
42211
+ (isNextDirection &&
42212
+ (hasNext ||
42213
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
42214
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42215
+ current.nodeValue &&
42216
+ range.startOffset !== current.nodeValue.length)))) {
42217
+ return;
42218
+ }
42219
+ }
42220
+ return cell;
42221
+ }
42144
42222
 
42145
42223
 
42146
42224
  /***/ }),
@@ -44188,16 +44266,16 @@ var __webpack_exports__ = {};
44188
44266
  __webpack_require__.r(__webpack_exports__);
44189
44267
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
44190
44268
  /* harmony export */ CommitMode: function() { return /* binding */ CommitMode; },
44191
- /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_6__.x; }
44269
+ /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_0__.x; }
44192
44270
  /* harmony export */ });
44193
- /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9823);
44194
- /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88222);
44271
+ /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46173);
44272
+ /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9823);
44195
44273
  /* harmony import */ var _core_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17352);
44196
44274
  /* harmony import */ var _core_decorators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22664);
44197
44275
  /* harmony import */ var _modules___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37435);
44198
44276
  /* harmony import */ var _styles_icons___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79721);
44199
- /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46173);
44200
- /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74470);
44277
+ /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74470);
44278
+ /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88222);
44201
44279
  /*!
44202
44280
  * Jodit Editor (https://xdsoft.net/jodit/)
44203
44281
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -44208,6 +44286,7 @@ __webpack_require__.r(__webpack_exports__);
44208
44286
  * @packageDocumentation
44209
44287
  * @module jodit
44210
44288
  */
44289
+ // eslint-disable-next-line simple-import-sort/imports
44211
44290
 
44212
44291
 
44213
44292
 
@@ -44220,7 +44299,7 @@ __webpack_require__.r(__webpack_exports__);
44220
44299
 
44221
44300
  // copy constants in Jodit
44222
44301
  Object.keys(_core_constants__WEBPACK_IMPORTED_MODULE_2__).forEach((key) => {
44223
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
44302
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
44224
44303
  });
44225
44304
  const esFilter = (key) => key !== '__esModule';
44226
44305
  // Icons
@@ -44235,32 +44314,32 @@ Object.keys(_modules___WEBPACK_IMPORTED_MODULE_4__)
44235
44314
  .forEach((key) => {
44236
44315
  // @ts-ignore
44237
44316
  const module = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44238
- const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isFunction */ .Tn)(module.prototype?.className)
44317
+ const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isFunction */ .Tn)(module.prototype?.className)
44239
44318
  ? module.prototype.className()
44240
44319
  : key;
44241
- if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .Kg)(name)) {
44320
+ if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isString */ .Kg)(name)) {
44242
44321
  console.warn('Module name must be a string', key);
44243
44322
  return;
44244
44323
  }
44245
44324
  // @ts-ignore
44246
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.modules[name] = module;
44325
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.modules[name] = module;
44247
44326
  });
44248
44327
  // Decorators
44249
44328
  Object.keys(_core_decorators__WEBPACK_IMPORTED_MODULE_3__)
44250
44329
  .filter(esFilter)
44251
44330
  .forEach((key) => {
44252
44331
  // @ts-ignore
44253
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
44332
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
44254
44333
  });
44255
44334
  ['Confirm', 'Alert', 'Prompt'].forEach((key) => {
44256
44335
  // @ts-ignore
44257
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44336
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44258
44337
  });
44259
44338
  // Languages
44260
- Object.keys(_languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)
44339
+ Object.keys(_languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)
44261
44340
  .filter(esFilter)
44262
44341
  .forEach((key) => {
44263
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A[key];
44342
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A[key];
44264
44343
  });
44265
44344
 
44266
44345
  class CommitMode {