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/es2015/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
  */
@@ -1736,7 +1736,7 @@ __webpack_require__.r(__webpack_exports__);
1736
1736
  * Released under MIT see LICENSE.txt in the project root for license information.
1737
1737
  * Copyright (c) 2013-2024 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
1738
1738
  */
1739
- const APP_VERSION = "4.2.14";
1739
+ const APP_VERSION = "4.2.15";
1740
1740
  // prettier-ignore
1741
1741
  const ES = "es2015";
1742
1742
  const IS_ES_MODERN = true;
@@ -9860,10 +9860,14 @@ class Response {
9860
9860
 
9861
9861
  "use strict";
9862
9862
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9863
- /* harmony export */ W: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__.W; }
9863
+ /* harmony export */ Qe: function() { return /* binding */ cursorInTheEdgeOfString; },
9864
+ /* harmony export */ W8: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__.W; },
9865
+ /* harmony export */ dY: function() { return /* binding */ findCorrectCurrentNode; }
9864
9866
  /* harmony export */ });
9865
- /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5298);
9866
- /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83541);
9867
+ /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9868
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55186);
9869
+ /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5298);
9870
+ /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(83541);
9867
9871
  /*!
9868
9872
  * Jodit Editor (https://xdsoft.net/jodit/)
9869
9873
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -9876,6 +9880,55 @@ class Response {
9876
9880
 
9877
9881
 
9878
9882
 
9883
+ /**
9884
+ * Check if the cursor is at the edge of the string
9885
+ * @private
9886
+ */
9887
+ function cursorInTheEdgeOfString(container, offset, start, end) {
9888
+ var _a;
9889
+ const text = ((_a = container.nodeValue) === null || _a === void 0 ? void 0 : _a.length) ? container.nodeValue : '';
9890
+ if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
9891
+ return true;
9892
+ }
9893
+ const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
9894
+ return start && ((inv && inv[0].length < offset) || (!inv && offset > 0));
9895
+ }
9896
+ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild, child) {
9897
+ node = range.startContainer.childNodes[range.startOffset];
9898
+ if (!node) {
9899
+ node = range.startContainer.childNodes[range.startOffset - 1];
9900
+ rightMode = true;
9901
+ }
9902
+ if (node && isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9903
+ // test Current method - Cursor in the left of some SPAN
9904
+ if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node.previousSibling)) {
9905
+ node = node.previousSibling;
9906
+ }
9907
+ else if (checkChild) {
9908
+ let current = child(node);
9909
+ while (current) {
9910
+ if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current)) {
9911
+ node = current;
9912
+ break;
9913
+ }
9914
+ current = child(current);
9915
+ }
9916
+ }
9917
+ }
9918
+ if (node && !isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9919
+ let leftChild = node, rightChild = node;
9920
+ do {
9921
+ leftChild = leftChild.firstChild;
9922
+ rightChild = rightChild.lastChild;
9923
+ } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild));
9924
+ if (leftChild === rightChild && leftChild && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild)) {
9925
+ node = leftChild;
9926
+ }
9927
+ }
9928
+ return { node, rightMode };
9929
+ }
9930
+
9931
+
9879
9932
  /***/ }),
9880
9933
 
9881
9934
  /***/ 5298:
@@ -9996,7 +10049,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9996
10049
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9997
10050
  /* harmony export */ L: function() { return /* binding */ Selection; }
9998
10051
  /* harmony export */ });
9999
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(31635);
10052
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(31635);
10000
10053
  /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
10001
10054
  /* harmony import */ var jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22664);
10002
10055
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55186);
@@ -10006,6 +10059,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
10006
10059
  /* 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__);
10007
10060
  /* harmony import */ var jodit_core_selection_helpers_move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83541);
10008
10061
  /* harmony import */ var _style_commit_style__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8757);
10062
+ /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(46602);
10009
10063
  /*!
10010
10064
  * Jodit Editor (https://xdsoft.net/jodit/)
10011
10065
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -10022,6 +10076,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
10022
10076
 
10023
10077
 
10024
10078
 
10079
+
10025
10080
  class Selection {
10026
10081
  constructor(jodit) {
10027
10082
  this.jodit = jodit;
@@ -10407,63 +10462,35 @@ class Selection {
10407
10462
  * Returns the current element under the cursor inside editor
10408
10463
  */
10409
10464
  current(checkChild = true) {
10410
- if (this.j.getRealMode() === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10411
- const sel = this.sel;
10412
- if (!sel || sel.rangeCount === 0) {
10413
- return null;
10414
- }
10415
- const range = sel.getRangeAt(0);
10416
- let node = range.startContainer, rightMode = false;
10417
- const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10418
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10419
- return node;
10420
- }
10421
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10422
- node = range.startContainer.childNodes[range.startOffset];
10423
- if (!node) {
10424
- node =
10425
- range.startContainer.childNodes[range.startOffset - 1];
10426
- rightMode = true;
10427
- }
10428
- if (node && sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10429
- // test Current method - Cursor in the left of some SPAN
10430
- if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node.previousSibling)) {
10431
- node = node.previousSibling;
10432
- }
10433
- else if (checkChild) {
10434
- let current = child(node);
10435
- while (current) {
10436
- if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(current)) {
10437
- node = current;
10438
- break;
10439
- }
10440
- current = child(current);
10441
- }
10442
- }
10443
- }
10444
- if (node && !sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10445
- let leftChild = node, rightChild = node;
10446
- do {
10447
- leftChild = leftChild.firstChild;
10448
- rightChild = rightChild.lastChild;
10449
- } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild));
10450
- if (leftChild === rightChild &&
10451
- leftChild &&
10452
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild)) {
10453
- node = leftChild;
10454
- }
10455
- }
10456
- }
10457
- // check - cursor inside editor
10458
- if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10459
- return node;
10460
- }
10465
+ if (this.j.getRealMode() !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10466
+ return null;
10467
+ }
10468
+ const sel = this.sel;
10469
+ if (!sel || sel.rangeCount === 0) {
10470
+ return null;
10471
+ }
10472
+ const range = sel.getRangeAt(0);
10473
+ let node = range.startContainer;
10474
+ let rightMode = false;
10475
+ const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10476
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10477
+ return node;
10478
+ }
10479
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10480
+ const ret = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .findCorrectCurrentNode */ .dY)(node, range, rightMode, sel.isCollapsed, checkChild, child);
10481
+ node = ret.node;
10482
+ rightMode = ret.rightMode;
10483
+ }
10484
+ // check - cursor inside editor
10485
+ if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10486
+ return node;
10461
10487
  }
10462
10488
  return null;
10463
10489
  }
10464
10490
  /**
10465
10491
  * Insert element in editor
10466
10492
  *
10493
+ * @param node - Node for insert
10467
10494
  * @param insertCursorAfter - After insert, cursor will move after element
10468
10495
  * @param fireChange - After insert, editor fire change event. You can prevent this behavior
10469
10496
  */
@@ -10525,6 +10552,7 @@ class Selection {
10525
10552
  * Inserts in the current cursor position some HTML snippet
10526
10553
  *
10527
10554
  * @param html - HTML The text to be inserted into the document
10555
+ * @param insertCursorAfter - After insert, cursor will move after element
10528
10556
  * @example
10529
10557
  * ```javascript
10530
10558
  * parent.s.insertHTML('<img src="image.png"/>');
@@ -10568,6 +10596,7 @@ class Selection {
10568
10596
  *
10569
10597
  * @param url - URL for image, or HTMLImageElement
10570
10598
  * @param styles - If specified, it will be applied <code>$(image).css(styles)</code>
10599
+ * @param defaultWidth - If specified, it will be applied <code>css('width', defaultWidth)</code>
10571
10600
  */
10572
10601
  insertImage(url, styles = null, defaultWidth = null) {
10573
10602
  const image = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isString */ .Kg)(url) ? this.j.createInside.element('img') : url;
@@ -10623,74 +10652,81 @@ class Selection {
10623
10652
  eachSelection(callback) {
10624
10653
  var _a;
10625
10654
  const sel = this.sel;
10626
- if (sel && sel.rangeCount) {
10627
- const range = sel.getRangeAt(0);
10628
- let root = range.commonAncestorContainer;
10629
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10630
- root = root.parentElement;
10631
- }
10632
- const nodes = [], startOffset = range.startOffset, length = root.childNodes.length, elementOffset = startOffset < length ? startOffset : length - 1;
10633
- let start = range.startContainer === this.area
10634
- ? root.childNodes[elementOffset]
10635
- : range.startContainer, end = range.endContainer === this.area
10636
- ? root.childNodes[range.endOffset - 1]
10637
- : range.endContainer;
10638
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10639
- start === range.startContainer &&
10640
- range.startOffset === ((_a = start.nodeValue) === null || _a === void 0 ? void 0 : _a.length) &&
10641
- start.nextSibling) {
10642
- start = start.nextSibling;
10643
- }
10644
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10645
- end === range.endContainer &&
10646
- range.endOffset === 0 &&
10647
- end.previousSibling) {
10648
- end = end.previousSibling;
10649
- }
10650
- const checkElm = (node) => {
10651
- if (node &&
10652
- node !== root &&
10653
- !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10654
- !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10655
- nodes.push(node);
10656
- }
10657
- };
10658
- checkElm(start);
10659
- if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10660
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10661
- checkElm(node);
10662
- // checks parentElement as well because partial selections are not equal to entire element
10663
- return (node === end ||
10664
- (node && node.contains && node.contains(end)));
10665
- }, root, true, false);
10666
- }
10667
- const forEvery = (current) => {
10668
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10669
- return;
10670
- }
10671
- if (current.nodeName.match(/^(UL|OL)$/)) {
10672
- return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10655
+ if (!sel || !sel.rangeCount) {
10656
+ return;
10657
+ }
10658
+ const range = sel.getRangeAt(0);
10659
+ let root = range.commonAncestorContainer;
10660
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10661
+ root = root.parentElement;
10662
+ }
10663
+ const nodes = [];
10664
+ const startOffset = range.startOffset;
10665
+ const length = root.childNodes.length;
10666
+ const elementOffset = startOffset < length ? startOffset : length - 1;
10667
+ let start = range.startContainer === this.area
10668
+ ? root.childNodes[elementOffset]
10669
+ : range.startContainer;
10670
+ let end = range.endContainer === this.area
10671
+ ? root.childNodes[range.endOffset - 1]
10672
+ : range.endContainer;
10673
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10674
+ start === range.startContainer &&
10675
+ range.startOffset === ((_a = start.nodeValue) === null || _a === void 0 ? void 0 : _a.length) &&
10676
+ start.nextSibling) {
10677
+ start = start.nextSibling;
10678
+ }
10679
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10680
+ end === range.endContainer &&
10681
+ range.endOffset === 0 &&
10682
+ end.previousSibling) {
10683
+ end = end.previousSibling;
10684
+ }
10685
+ const checkElm = (node) => {
10686
+ if (node &&
10687
+ node !== root &&
10688
+ !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10689
+ !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10690
+ nodes.push(node);
10691
+ }
10692
+ };
10693
+ checkElm(start);
10694
+ if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10695
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10696
+ checkElm(node);
10697
+ // checks parentElement as well because partial selections are not equal to entire element
10698
+ return (node === end ||
10699
+ (node && node.contains && node.contains(end)));
10700
+ }, root, true, false);
10701
+ }
10702
+ const forEvery = (current) => {
10703
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10704
+ return;
10705
+ }
10706
+ if (current.nodeName.match(/^(UL|OL)$/)) {
10707
+ return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10708
+ }
10709
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10710
+ if (current.firstChild) {
10711
+ current = current.firstChild;
10673
10712
  }
10674
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10675
- if (current.firstChild) {
10676
- current = current.firstChild;
10677
- }
10678
- else {
10679
- const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10680
- current.appendChild(currentB);
10681
- current = currentB;
10682
- }
10713
+ else {
10714
+ const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10715
+ current.appendChild(currentB);
10716
+ current = currentB;
10683
10717
  }
10684
- callback(current);
10685
- };
10686
- if (nodes.length === 0 && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10718
+ }
10719
+ callback(current);
10720
+ };
10721
+ if (nodes.length === 0) {
10722
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10687
10723
  nodes.push(start);
10688
10724
  }
10689
- if (nodes.length === 0 && start.firstChild) {
10725
+ if (start.firstChild) {
10690
10726
  nodes.push(start.firstChild);
10691
10727
  }
10692
- nodes.forEach(forEvery);
10693
10728
  }
10729
+ nodes.forEach(forEvery);
10694
10730
  }
10695
10731
  /**
10696
10732
  * Checks if the cursor is at the end(start) block
@@ -10702,7 +10738,7 @@ class Selection {
10702
10738
  * @returns true - the cursor is at the end(start) block, null - cursor somewhere outside
10703
10739
  */
10704
10740
  cursorInTheEdge(start, parentBlock, fake = null) {
10705
- var _a, _b;
10741
+ var _a;
10706
10742
  const end = !start, range = (_a = this.sel) === null || _a === void 0 ? void 0 : _a.getRangeAt(0);
10707
10743
  fake !== null && fake !== void 0 ? fake : (fake = this.current(false));
10708
10744
  if (!range || !fake || !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(parentBlock, fake, true)) {
@@ -10718,13 +10754,7 @@ class Selection {
10718
10754
  this.j.e.fire('isInvisibleForCursor', elm) === true));
10719
10755
  // check right offset
10720
10756
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(container)) {
10721
- const text = ((_b = container.nodeValue) === null || _b === void 0 ? void 0 : _b.length) ? container.nodeValue : '';
10722
- if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
10723
- return false;
10724
- }
10725
- const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
10726
- if (start &&
10727
- ((inv && inv[0].length < offset) || (!inv && offset > 0))) {
10757
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .cursorInTheEdgeOfString */ .Qe)(container, offset, start, end)) {
10728
10758
  return false;
10729
10759
  }
10730
10760
  }
@@ -10813,6 +10843,7 @@ class Selection {
10813
10843
  }
10814
10844
  /**
10815
10845
  * Set cursor in the node
10846
+ * @param node - Node element
10816
10847
  * @param inStart - set cursor in start of element
10817
10848
  */
10818
10849
  setCursorIn(node, inStart = false) {
@@ -10873,6 +10904,7 @@ class Selection {
10873
10904
  }
10874
10905
  /**
10875
10906
  * Select node
10907
+ * @param node - Node element
10876
10908
  * @param inward - select all inside
10877
10909
  */
10878
10910
  select(node, inward = false) {
@@ -11147,19 +11179,19 @@ class Selection {
11147
11179
  return this;
11148
11180
  }
11149
11181
  }
11150
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11182
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11151
11183
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11152
11184
  ], Selection.prototype, "createRange", null);
11153
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11185
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11154
11186
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11155
11187
  ], Selection.prototype, "focus", null);
11156
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11188
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11157
11189
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11158
11190
  ], Selection.prototype, "setCursorAfter", null);
11159
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11191
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11160
11192
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11161
11193
  ], Selection.prototype, "setCursorBefore", null);
11162
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11194
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11163
11195
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11164
11196
  ], Selection.prototype, "setCursorIn", null);
11165
11197
 
@@ -22294,6 +22326,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22294
22326
  }
22295
22327
  /**
22296
22328
  * Generate formal table martix columns*rows
22329
+ * @param table - Working table
22297
22330
  * @param callback - if return false cycle break
22298
22331
  */
22299
22332
  formalMatrix(table, callback) {
@@ -22363,7 +22396,6 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22363
22396
  * @param line - Insert a new line after/before this
22364
22397
  * line contains the selected cell
22365
22398
  * @param after - Insert a new line after line contains the selected cell
22366
- * @param create - Instance of Create class
22367
22399
  */
22368
22400
  appendRow(table, line, after) {
22369
22401
  return Table.__appendRow(table, line, after, this.j.createInside);
@@ -22532,13 +22564,36 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22532
22564
  return Table.__getSelectedBound(table, selectedCells);
22533
22565
  }
22534
22566
  static __normalizeTable(table) {
22535
- let i, j, min, not;
22536
22567
  const __marked = [], box = Table.__formalMatrix(table);
22537
- // remove extra colspans
22538
- for (j = 0; j < box[0].length; j += 1) {
22539
- min = 1000000;
22540
- not = false;
22541
- for (i = 0; i < box.length; i += 1) {
22568
+ Table.__removeExtraColspans(box, __marked);
22569
+ Table.__removeExtraRowspans(box, __marked);
22570
+ // remove rowspans and colspans equal 1 and empty class
22571
+ for (let i = 0; i < box.length; i += 1) {
22572
+ for (let j = 0; j < box[i].length; j += 1) {
22573
+ if (box[i][j] === undefined) {
22574
+ continue; // broken table
22575
+ }
22576
+ if (box[i][j].hasAttribute('rowspan') &&
22577
+ box[i][j].rowSpan === 1) {
22578
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22579
+ }
22580
+ if (box[i][j].hasAttribute('colspan') &&
22581
+ box[i][j].colSpan === 1) {
22582
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22583
+ }
22584
+ if (box[i][j].hasAttribute('class') &&
22585
+ !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22586
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22587
+ }
22588
+ }
22589
+ }
22590
+ Table.__unmark(__marked);
22591
+ }
22592
+ static __removeExtraColspans(box, __marked) {
22593
+ for (let j = 0; j < box[0].length; j += 1) {
22594
+ let min = 1000000;
22595
+ let not = false;
22596
+ for (let i = 0; i < box.length; i += 1) {
22542
22597
  if (box[i][j] === undefined) {
22543
22598
  continue; // broken table
22544
22599
  }
@@ -22549,7 +22604,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22549
22604
  min = Math.min(min, box[i][j].colSpan);
22550
22605
  }
22551
22606
  if (!not) {
22552
- for (i = 0; i < box.length; i += 1) {
22607
+ for (let i = 0; i < box.length; i += 1) {
22553
22608
  if (box[i][j] === undefined) {
22554
22609
  continue; // broken table
22555
22610
  }
@@ -22557,10 +22612,13 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22557
22612
  }
22558
22613
  }
22559
22614
  }
22560
- // remove extra rowspans
22615
+ }
22616
+ static __removeExtraRowspans(box, marked) {
22617
+ let i = 0;
22618
+ let j = 0;
22561
22619
  for (i = 0; i < box.length; i += 1) {
22562
- min = 1000000;
22563
- not = false;
22620
+ let min = 1000000;
22621
+ let not = false;
22564
22622
  for (j = 0; j < box[i].length; j += 1) {
22565
22623
  if (box[i][j] === undefined) {
22566
22624
  continue; // broken table
@@ -22576,31 +22634,10 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22576
22634
  if (box[i][j] === undefined) {
22577
22635
  continue; // broken table
22578
22636
  }
22579
- Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, __marked);
22580
- }
22581
- }
22582
- }
22583
- // remove rowspans and colspans equal 1 and empty class
22584
- for (i = 0; i < box.length; i += 1) {
22585
- for (j = 0; j < box[i].length; j += 1) {
22586
- if (box[i][j] === undefined) {
22587
- continue; // broken table
22588
- }
22589
- if (box[i][j].hasAttribute('rowspan') &&
22590
- box[i][j].rowSpan === 1) {
22591
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22592
- }
22593
- if (box[i][j].hasAttribute('colspan') &&
22594
- box[i][j].colSpan === 1) {
22595
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22596
- }
22597
- if (box[i][j].hasAttribute('class') &&
22598
- !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22599
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22637
+ Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, marked);
22600
22638
  }
22601
22639
  }
22602
22640
  }
22603
- Table.__unmark(__marked);
22604
22641
  }
22605
22642
  /**
22606
22643
  * Try recalculate all coluns and rows after change
@@ -24017,34 +24054,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24017
24054
  }
24018
24055
  const promises = [];
24019
24056
  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
- }
24057
+ readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
24048
24058
  }
24049
24059
  fileList = fileList.filter(a => a);
24050
24060
  if (fileList.length) {
@@ -24055,7 +24065,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24055
24065
  for (let i = 0; i < fileList.length; i += 1) {
24056
24066
  file = fileList[i];
24057
24067
  if (file) {
24058
- const hasRealExtension = /\.[\d\w]+$/.test(file.name);
24068
+ const hasRealExtension = /\.\w+$/.test(file.name);
24059
24069
  const mime = file.type.match(/\/([a-z0-9]+)/i);
24060
24070
  const extension = mime && mime[1] ? mime[1].toLowerCase() : '';
24061
24071
  let newName = fileList[i].name ||
@@ -24104,6 +24114,37 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24104
24114
  }
24105
24115
  return Promise.all(promises);
24106
24116
  }
24117
+ function readImagesWithReader(fileList, imagesExtensions, promises, uploader, handlerSuccess, defaultHandlerSuccess) {
24118
+ let file, i;
24119
+ for (i = 0; i < fileList.length; i += 1) {
24120
+ file = fileList[i];
24121
+ if (file && file.type) {
24122
+ const mime = file.type.match(/\/([a-z0-9]+)/i);
24123
+ const extension = mime[1] ? mime[1].toLowerCase() : '';
24124
+ if (!imagesExtensions.includes(extension)) {
24125
+ continue;
24126
+ }
24127
+ const reader = new FileReader();
24128
+ promises.push(uploader.j.async.promise((resolve, reject) => {
24129
+ reader.onerror = reject;
24130
+ reader.onloadend = () => {
24131
+ const resp = {
24132
+ baseurl: '',
24133
+ files: [reader.result],
24134
+ isImages: [true]
24135
+ };
24136
+ const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24137
+ ? handlerSuccess
24138
+ : defaultHandlerSuccess;
24139
+ handler.call(uploader, resp);
24140
+ resolve(resp);
24141
+ };
24142
+ reader.readAsDataURL(file);
24143
+ }));
24144
+ fileList[i] = null;
24145
+ }
24146
+ }
24147
+ }
24107
24148
 
24108
24149
 
24109
24150
  /***/ }),
@@ -25723,7 +25764,7 @@ class backspace extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_3__/* .Plugin
25723
25764
  if (jodit.e.fire('backSpaceBeforeCases', backspace, fakeNode)) {
25724
25765
  return false;
25725
25766
  }
25726
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
25767
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
25727
25768
  if (_cases__WEBPACK_IMPORTED_MODULE_6__/* .cases */ .C.some((func) => {
25728
25769
  if ((0,jodit_core_helpers_checker_is_function__WEBPACK_IMPORTED_MODULE_8__/* .isFunction */ .T)(func) &&
25729
25770
  func(jodit, fakeNode, backspace, mode)) {
@@ -25982,22 +26023,15 @@ function checkNotCollapsed(jodit) {
25982
26023
  * @private
25983
26024
  */
25984
26025
  function checkRemoveChar(jodit, fakeNode, backspace, mode) {
25985
- var _a, _b, _c;
26026
+ var _a, _b;
25986
26027
  const step = backspace ? -1 : 1;
25987
26028
  const anotherSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, !backspace);
25988
- let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace), removeNeighbor = null;
25989
- let charRemoved = false, removed;
25990
- const getNextInlineSibling = (sibling) => {
25991
- let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
25992
- if (!nextSibling &&
25993
- sibling.parentNode &&
25994
- sibling.parentNode !== jodit.editor) {
25995
- nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, jodit.editor, true);
25996
- }
25997
- return nextSibling;
25998
- };
26029
+ let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace);
26030
+ let removeNeighbor = null;
26031
+ let charRemoved = false;
26032
+ let removed;
25999
26033
  if (!sibling) {
26000
- sibling = getNextInlineSibling(fakeNode);
26034
+ sibling = getNextInlineSibling(fakeNode, backspace, jodit.editor);
26001
26035
  }
26002
26036
  while (sibling && (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(sibling) || jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling))) {
26003
26037
  while (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling)) {
@@ -26007,57 +26041,17 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26007
26041
  break;
26008
26042
  }
26009
26043
  if ((_a = sibling.nodeValue) === null || _a === void 0 ? void 0 : _a.length) {
26010
- // For Unicode escapes
26011
- let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26012
- const length = value.length;
26013
- let index = backspace ? length - 1 : 0;
26014
- if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26015
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26016
- index += step;
26017
- }
26018
- }
26019
- removed = value[index];
26020
- if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26021
- index += step;
26022
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26023
- index += step;
26024
- }
26025
- index += backspace ? 1 : -1;
26026
- }
26027
- if (backspace && index < 0) {
26028
- value = [];
26029
- }
26030
- else {
26031
- value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26032
- }
26033
- if (!anotherSibling ||
26034
- !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26035
- (!backspace ? / $/ : /^ /).test((_b = anotherSibling.nodeValue) !== null && _b !== void 0 ? _b : '') ||
26036
- !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26037
- for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26038
- if (value[i] === ' ') {
26039
- value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26040
- }
26041
- else {
26042
- break;
26043
- }
26044
- }
26045
- }
26046
- sibling.nodeValue = value.join('');
26044
+ removed = tryRemoveChar(sibling, backspace, step, anotherSibling);
26047
26045
  }
26048
- if (!((_c = sibling.nodeValue) === null || _c === void 0 ? void 0 : _c.length)) {
26046
+ if (!((_b = sibling.nodeValue) === null || _b === void 0 ? void 0 : _b.length)) {
26049
26047
  removeNeighbor = sibling;
26050
26048
  }
26051
26049
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.isVoid)(removed) && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26050
+ checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit);
26052
26051
  charRemoved = true;
26053
- (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);
26054
- if (mode === 'sentence' ||
26055
- (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26056
- checkRemoveChar(jodit, fakeNode, backspace, mode);
26057
- }
26058
26052
  break;
26059
26053
  }
26060
- const nextSibling = getNextInlineSibling(sibling);
26054
+ const nextSibling = getNextInlineSibling(sibling, backspace, jodit.editor);
26061
26055
  if (removeNeighbor) {
26062
26056
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.safeRemove(removeNeighbor);
26063
26057
  removeNeighbor = null;
@@ -26079,6 +26073,13 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26079
26073
  }
26080
26074
  return charRemoved;
26081
26075
  }
26076
+ function getNextInlineSibling(sibling, backspace, root) {
26077
+ let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
26078
+ if (!nextSibling && sibling.parentNode && sibling.parentNode !== root) {
26079
+ nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, root, true);
26080
+ }
26081
+ return nextSibling;
26082
+ }
26082
26083
  /**
26083
26084
  * Helper removes all empty inline parents
26084
26085
  */
@@ -26103,6 +26104,57 @@ function addBRInsideEmptyBlock(jodit, node) {
26103
26104
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after(node, jodit.createInside.element('br'));
26104
26105
  }
26105
26106
  }
26107
+ function tryRemoveChar(sibling, backspace, step, anotherSibling) {
26108
+ // For Unicode escapes
26109
+ let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26110
+ const length = value.length;
26111
+ let index = backspace ? length - 1 : 0;
26112
+ if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26113
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26114
+ index += step;
26115
+ }
26116
+ }
26117
+ const removed = value[index];
26118
+ if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26119
+ index += step;
26120
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26121
+ index += step;
26122
+ }
26123
+ index += backspace ? 1 : -1;
26124
+ }
26125
+ if (backspace && index < 0) {
26126
+ value = [];
26127
+ }
26128
+ else {
26129
+ value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26130
+ }
26131
+ replaceSpaceOnNBSP(anotherSibling, backspace, value);
26132
+ sibling.nodeValue = value.join('');
26133
+ return removed;
26134
+ }
26135
+ function replaceSpaceOnNBSP(anotherSibling, backspace, value) {
26136
+ var _a;
26137
+ if (!anotherSibling ||
26138
+ !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26139
+ (!backspace ? / $/ : /^ /).test((_a = anotherSibling.nodeValue) !== null && _a !== void 0 ? _a : '') ||
26140
+ !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26141
+ for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26142
+ if (value[i] === ' ') {
26143
+ value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26144
+ }
26145
+ else {
26146
+ break;
26147
+ }
26148
+ }
26149
+ }
26150
+ }
26151
+ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit) {
26152
+ (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);
26153
+ if (mode === 'sentence' ||
26154
+ (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26155
+ checkRemoveChar(jodit, fakeNode, backspace, mode);
26156
+ }
26157
+ }
26106
26158
 
26107
26159
 
26108
26160
  /***/ }),
@@ -26140,7 +26192,7 @@ function checkRemoveContentNotEditable(jodit, fakeNode, backspace) {
26140
26192
  !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isContentEditable(neighbor, jodit.editor)) {
26141
26193
  (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);
26142
26194
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.safeRemove(neighbor);
26143
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
26195
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
26144
26196
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit.s.setCursorBefore : jodit.s.setCursorAfter, fakeNode);
26145
26197
  return true;
26146
26198
  }
@@ -29000,45 +29052,11 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
29000
29052
  const sel = this.j.s.sel;
29001
29053
  const range = this.bufferRange ||
29002
29054
  (sel && sel.rangeCount ? sel.getRangeAt(0) : null);
29003
- let fragment = null;
29004
- if (!this.draggable && range) {
29005
- fragment = this.isCopyMode
29006
- ? range.cloneContents()
29007
- : range.extractContents();
29008
- }
29009
- else if (this.draggable) {
29010
- if (this.isCopyMode) {
29011
- const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
29012
- ? ['a', 'href']
29013
- : ['img', 'src'];
29014
- fragment = this.j.createInside.element(tagName);
29015
- fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
29016
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
29017
- '');
29018
- if (tagName === 'a') {
29019
- fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
29020
- }
29021
- }
29022
- else {
29023
- fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
29024
- }
29025
- }
29026
- else if (this.getText(event)) {
29027
- fragment = this.j.createInside.fromHTML(this.getText(event));
29028
- }
29055
+ const fragment = this.__getWorkFragment(range, event);
29029
29056
  sel && sel.removeAllRanges();
29030
29057
  this.j.s.insertCursorAtPoint(event.clientX, event.clientY);
29031
29058
  if (fragment) {
29032
- this.j.s.insertNode(fragment, false, false);
29033
- if (range && fragment.firstChild && fragment.lastChild) {
29034
- range.setStartBefore(fragment.firstChild);
29035
- range.setEndAfter(fragment.lastChild);
29036
- this.j.s.selectRange(range);
29037
- this.j.e.fire('synchro');
29038
- }
29039
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
29040
- this.j.e.fire('afterInsertImage', fragment);
29041
- }
29059
+ this.__insertFragment.call(this, fragment, range);
29042
29060
  }
29043
29061
  event.preventDefault();
29044
29062
  event.stopPropagation();
@@ -29046,6 +29064,47 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
29046
29064
  this.isFragmentFromEditor = false;
29047
29065
  this.removeDragListeners();
29048
29066
  }
29067
+ __getWorkFragment(range, event) {
29068
+ let fragment = null;
29069
+ if (!this.draggable && range) {
29070
+ fragment = this.isCopyMode
29071
+ ? range.cloneContents()
29072
+ : range.extractContents();
29073
+ }
29074
+ else if (this.draggable) {
29075
+ if (this.isCopyMode) {
29076
+ const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
29077
+ ? ['a', 'href']
29078
+ : ['img', 'src'];
29079
+ fragment = this.j.createInside.element(tagName);
29080
+ fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
29081
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
29082
+ '');
29083
+ if (tagName === 'a') {
29084
+ fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
29085
+ }
29086
+ }
29087
+ else {
29088
+ fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
29089
+ }
29090
+ }
29091
+ else if (this.getText(event)) {
29092
+ fragment = this.j.createInside.fromHTML(this.getText(event));
29093
+ }
29094
+ return fragment;
29095
+ }
29096
+ __insertFragment(fragment, range) {
29097
+ this.j.s.insertNode(fragment, false, false);
29098
+ if (range && fragment.firstChild && fragment.lastChild) {
29099
+ range.setStartBefore(fragment.firstChild);
29100
+ range.setEndAfter(fragment.lastChild);
29101
+ this.j.s.selectRange(range);
29102
+ this.j.e.fire('synchro');
29103
+ }
29104
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
29105
+ this.j.e.fire('afterInsertImage', fragment);
29106
+ }
29107
+ }
29049
29108
  /** @override */
29050
29109
  beforeDestruct() {
29051
29110
  this.onDragEnd();
@@ -34778,35 +34837,7 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34778
34837
  if (link) {
34779
34838
  url_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
34780
34839
  if (modeClassName) {
34781
- switch (modeClassName) {
34782
- case 'input':
34783
- if (className_input) {
34784
- className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34785
- }
34786
- break;
34787
- case 'select':
34788
- if (className_select) {
34789
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
34790
- const option = className_select.options.item(i);
34791
- if (option) {
34792
- option.selected = false;
34793
- }
34794
- }
34795
- const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34796
- classNames.split(' ').forEach(className => {
34797
- if (className) {
34798
- for (let i = 0; i < className_select.options.length; i++) {
34799
- const option = className_select.options.item(i);
34800
- if ((option === null || option === void 0 ? void 0 : option.value) &&
34801
- option.value === className) {
34802
- option.selected = true;
34803
- }
34804
- }
34805
- }
34806
- });
34807
- }
34808
- break;
34809
- }
34840
+ readClassnames(modeClassName, className_input, link, className_select);
34810
34841
  }
34811
34842
  if (openInNewTabCheckbox && target_checkbox) {
34812
34843
  target_checkbox.checked = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
@@ -34867,44 +34898,10 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34867
34898
  links = [link];
34868
34899
  }
34869
34900
  links.forEach(a => {
34870
- var _a;
34871
34901
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', url_input.value);
34872
- if (modeClassName && (className_input !== null && className_input !== void 0 ? className_input : className_select)) {
34873
- if (modeClassName === 'input') {
34874
- if (className_input.value === '' &&
34875
- a.hasAttribute('class')) {
34876
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34877
- }
34878
- if (className_input.value !== '') {
34879
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34880
- }
34881
- }
34882
- else if (modeClassName === 'select') {
34883
- if (a.hasAttribute('class')) {
34884
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34885
- }
34886
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
34887
- const className = (_a = className_select.selectedOptions.item(i)) === null || _a === void 0 ? void 0 : _a.value;
34888
- if (className) {
34889
- a.classList.add(className);
34890
- }
34891
- }
34892
- }
34893
- }
34902
+ writeClasses(modeClassName, className_input, className_select, a);
34894
34903
  if (!isImageContent) {
34895
- let newContent = a.textContent;
34896
- if (content_input.value.trim().length) {
34897
- if (textWasChanged) {
34898
- newContent = content_input.value;
34899
- }
34900
- }
34901
- else {
34902
- newContent = url_input.value;
34903
- }
34904
- const content = a.textContent;
34905
- if (newContent !== content) {
34906
- a.textContent = newContent;
34907
- }
34904
+ writeImage(a, content_input, textWasChanged, url_input);
34908
34905
  }
34909
34906
  if (openInNewTabCheckbox && target_checkbox) {
34910
34907
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
@@ -34949,6 +34946,75 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34949
34946
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_0__.autobind
34950
34947
  ], link.prototype, "__generateForm", null);
34951
34948
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('link', link);
34949
+ function writeClasses(modeClassName, className_input, className_select, a) {
34950
+ var _a;
34951
+ if (modeClassName && (className_input !== null && className_input !== void 0 ? className_input : className_select)) {
34952
+ if (modeClassName === 'input') {
34953
+ if (className_input.value === '' && a.hasAttribute('class')) {
34954
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34955
+ }
34956
+ if (className_input.value !== '') {
34957
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34958
+ }
34959
+ }
34960
+ else if (modeClassName === 'select') {
34961
+ if (a.hasAttribute('class')) {
34962
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34963
+ }
34964
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34965
+ const className = (_a = className_select.selectedOptions.item(i)) === null || _a === void 0 ? void 0 : _a.value;
34966
+ if (className) {
34967
+ a.classList.add(className);
34968
+ }
34969
+ }
34970
+ }
34971
+ }
34972
+ }
34973
+ function readClassnames(modeClassName, className_input, link, className_select) {
34974
+ switch (modeClassName) {
34975
+ case 'input':
34976
+ if (className_input) {
34977
+ className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34978
+ }
34979
+ break;
34980
+ case 'select':
34981
+ if (className_select) {
34982
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34983
+ const option = className_select.options.item(i);
34984
+ if (option) {
34985
+ option.selected = false;
34986
+ }
34987
+ }
34988
+ const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34989
+ classNames.split(' ').forEach(className => {
34990
+ if (className) {
34991
+ for (let i = 0; i < className_select.options.length; i++) {
34992
+ const option = className_select.options.item(i);
34993
+ if ((option === null || option === void 0 ? void 0 : option.value) && option.value === className) {
34994
+ option.selected = true;
34995
+ }
34996
+ }
34997
+ }
34998
+ });
34999
+ }
35000
+ break;
35001
+ }
35002
+ }
35003
+ function writeImage(a, content_input, textWasChanged, url_input) {
35004
+ let newContent = a.textContent;
35005
+ if (content_input.value.trim().length) {
35006
+ if (textWasChanged) {
35007
+ newContent = content_input.value;
35008
+ }
35009
+ }
35010
+ else {
35011
+ newContent = url_input.value;
35012
+ }
35013
+ const content = a.textContent;
35014
+ if (newContent !== content) {
35015
+ a.textContent = newContent;
35016
+ }
35017
+ }
34952
35018
 
34953
35019
 
34954
35020
  /***/ }),
@@ -37792,7 +37858,6 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__/* .Config */ .T.prototype.controls.fin
37792
37858
  /* harmony export */ _B: function() { return /* binding */ highlightTextRanges; },
37793
37859
  /* harmony export */ zy: function() { return /* binding */ getSelectionWrappers; }
37794
37860
  /* harmony export */ });
37795
- /* unused harmony export isSelectionWrapper */
37796
37861
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55186);
37797
37862
  /* harmony import */ var jodit_core_helpers_utils_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58720);
37798
37863
  /*!
@@ -37814,60 +37879,14 @@ function highlightTextRanges(jodit, rng, restRanges, ci, root) {
37814
37879
  rng.endContainer.nodeValue == null) {
37815
37880
  return;
37816
37881
  }
37817
- if (jodit.o.search.useCustomHighlightAPI &&
37818
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37819
- typeof window.Highlight !== 'undefined') {
37820
- const ranges = [rng, ...restRanges].map(rng => {
37821
- const range = jodit.selection.createRange();
37822
- range.setStart(rng.startContainer, rng.startOffset);
37823
- range.setEnd(rng.endContainer, rng.endOffset);
37824
- return range;
37825
- });
37826
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37827
- const searchHighlight = new Highlight(...ranges);
37828
- // @ts-ignore
37829
- CSS.highlights.clear();
37830
- // @ts-ignore
37831
- CSS.highlights.set('jodit-search-result', searchHighlight);
37832
- restRanges.length = 0;
37882
+ if (checkNativeSelectionMethod(jodit, rng, restRanges)) {
37833
37883
  return;
37834
37884
  }
37835
37885
  const span = ci.element('span', {
37836
37886
  [TMP_ATTR]: true
37837
37887
  });
37838
37888
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.markTemporary(span);
37839
- const startText = rng.startContainer.nodeValue;
37840
- let diff = 0;
37841
- if (rng.startOffset !== 0) {
37842
- const text = ci.text(startText.substring(0, rng.startOffset));
37843
- rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37844
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37845
- if (rng.startContainer === rng.endContainer) {
37846
- diff = rng.startOffset;
37847
- rng.endOffset -= diff;
37848
- }
37849
- rng.startOffset = 0;
37850
- }
37851
- const endText = rng.endContainer.nodeValue;
37852
- if (rng.endOffset !== endText.length) {
37853
- const text = ci.text(endText.substring(rng.endOffset));
37854
- rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37855
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37856
- for (const range of restRanges) {
37857
- if (range.startContainer === rng.endContainer) {
37858
- range.startContainer = text;
37859
- range.startOffset = range.startOffset - rng.endOffset - diff;
37860
- if (range.endContainer === rng.endContainer) {
37861
- range.endContainer = text;
37862
- range.endOffset = range.endOffset - rng.endOffset - diff;
37863
- }
37864
- }
37865
- else {
37866
- break;
37867
- }
37868
- }
37869
- rng.endOffset = rng.endContainer.nodeValue.length;
37870
- }
37889
+ normalizeRanges(rng, restRanges, ci);
37871
37890
  let next = rng.startContainer;
37872
37891
  do {
37873
37892
  if (!next) {
@@ -37913,6 +37932,61 @@ function clearSelectionWrappersFromHTML(root) {
37913
37932
  function isSelectionWrapper(node) {
37914
37933
  return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isElement(node) && node.hasAttribute(TMP_ATTR);
37915
37934
  }
37935
+ function checkNativeSelectionMethod(jodit, rng, restRanges) {
37936
+ if (jodit.o.search.useCustomHighlightAPI &&
37937
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37938
+ typeof window.Highlight !== 'undefined') {
37939
+ const ranges = [rng, ...restRanges].map(rng => {
37940
+ const range = jodit.selection.createRange();
37941
+ range.setStart(rng.startContainer, rng.startOffset);
37942
+ range.setEnd(rng.endContainer, rng.endOffset);
37943
+ return range;
37944
+ });
37945
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37946
+ const searchHighlight = new Highlight(...ranges);
37947
+ // @ts-ignore
37948
+ CSS.highlights.clear();
37949
+ // @ts-ignore
37950
+ CSS.highlights.set('jodit-search-result', searchHighlight);
37951
+ restRanges.length = 0;
37952
+ return true;
37953
+ }
37954
+ return false;
37955
+ }
37956
+ function normalizeRanges(rng, restRanges, ci) {
37957
+ const startText = rng.startContainer.nodeValue;
37958
+ let diff = 0;
37959
+ if (rng.startOffset !== 0) {
37960
+ const text = ci.text(startText.substring(0, rng.startOffset));
37961
+ rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37962
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37963
+ if (rng.startContainer === rng.endContainer) {
37964
+ diff = rng.startOffset;
37965
+ rng.endOffset -= diff;
37966
+ }
37967
+ rng.startOffset = 0;
37968
+ }
37969
+ const endText = rng.endContainer.nodeValue;
37970
+ if (rng.endOffset !== endText.length) {
37971
+ const text = ci.text(endText.substring(rng.endOffset));
37972
+ rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37973
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37974
+ for (const range of restRanges) {
37975
+ if (range.startContainer === rng.endContainer) {
37976
+ range.startContainer = text;
37977
+ range.startOffset = range.startOffset - rng.endOffset - diff;
37978
+ if (range.endContainer === rng.endContainer) {
37979
+ range.endContainer = text;
37980
+ range.endOffset = range.endOffset - rng.endOffset - diff;
37981
+ }
37982
+ }
37983
+ else {
37984
+ break;
37985
+ }
37986
+ }
37987
+ rng.endOffset = rng.endContainer.nodeValue.length;
37988
+ }
37989
+ }
37916
37990
 
37917
37991
 
37918
37992
  /***/ }),
@@ -42128,38 +42202,10 @@ function tableKeyboardNavigation(editor) {
42128
42202
  .off('.tableKeyboardNavigation')
42129
42203
  .on('keydown.tableKeyboardNavigation', (event) => {
42130
42204
  const { key } = event;
42131
- if (!WORK_KEYS.has(key)) {
42132
- return;
42133
- }
42134
- const current = editor.s.current();
42135
- if (!current) {
42136
- return;
42137
- }
42138
- 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);
42205
+ const cell = findCell(editor, key);
42139
42206
  if (!cell) {
42140
42207
  return;
42141
42208
  }
42142
- const { range } = editor.s;
42143
- if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
42144
- const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
42145
- 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
42146
- ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
42147
- : Boolean(elm), cell);
42148
- if ((!isNextDirection &&
42149
- (hasNext ||
42150
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
42151
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42152
- range.startOffset !== 0))) ||
42153
- (isNextDirection &&
42154
- (hasNext ||
42155
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
42156
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42157
- current.nodeValue &&
42158
- range.startOffset !==
42159
- current.nodeValue.length)))) {
42160
- return;
42161
- }
42162
- }
42163
42209
  const tableModule = editor.getInstance(jodit_modules_table_table__WEBPACK_IMPORTED_MODULE_4__/* .Table */ .X, editor.o);
42164
42210
  const table = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.closest(cell, 'table', editor.editor);
42165
42211
  let next = null;
@@ -42217,6 +42263,40 @@ function tableKeyboardNavigation(editor) {
42217
42263
  });
42218
42264
  }
42219
42265
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('tableKeyboardNavigation', tableKeyboardNavigation);
42266
+ function findCell(editor, key) {
42267
+ if (!WORK_KEYS.has(key)) {
42268
+ return;
42269
+ }
42270
+ const current = editor.s.current();
42271
+ if (!current) {
42272
+ return;
42273
+ }
42274
+ 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);
42275
+ if (!cell) {
42276
+ return;
42277
+ }
42278
+ const { range } = editor.s;
42279
+ if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
42280
+ const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
42281
+ 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
42282
+ ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
42283
+ : Boolean(elm), cell);
42284
+ if ((!isNextDirection &&
42285
+ (hasNext ||
42286
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
42287
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42288
+ range.startOffset !== 0))) ||
42289
+ (isNextDirection &&
42290
+ (hasNext ||
42291
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
42292
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42293
+ current.nodeValue &&
42294
+ range.startOffset !== current.nodeValue.length)))) {
42295
+ return;
42296
+ }
42297
+ }
42298
+ return cell;
42299
+ }
42220
42300
 
42221
42301
 
42222
42302
  /***/ }),
@@ -44265,16 +44345,16 @@ var __webpack_exports__ = {};
44265
44345
  __webpack_require__.r(__webpack_exports__);
44266
44346
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
44267
44347
  /* harmony export */ CommitMode: function() { return /* binding */ CommitMode; },
44268
- /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_6__.x; }
44348
+ /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_0__.x; }
44269
44349
  /* harmony export */ });
44270
- /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9823);
44271
- /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88222);
44350
+ /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46173);
44351
+ /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9823);
44272
44352
  /* harmony import */ var _core_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17352);
44273
44353
  /* harmony import */ var _core_decorators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22664);
44274
44354
  /* harmony import */ var _modules___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37435);
44275
44355
  /* harmony import */ var _styles_icons___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79721);
44276
- /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46173);
44277
- /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74470);
44356
+ /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74470);
44357
+ /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88222);
44278
44358
  /*!
44279
44359
  * Jodit Editor (https://xdsoft.net/jodit/)
44280
44360
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -44285,6 +44365,7 @@ __webpack_require__.r(__webpack_exports__);
44285
44365
  * @packageDocumentation
44286
44366
  * @module jodit
44287
44367
  */
44368
+ // eslint-disable-next-line simple-import-sort/imports
44288
44369
 
44289
44370
 
44290
44371
 
@@ -44297,7 +44378,7 @@ __webpack_require__.r(__webpack_exports__);
44297
44378
 
44298
44379
  // copy constants in Jodit
44299
44380
  Object.keys(_core_constants__WEBPACK_IMPORTED_MODULE_2__).forEach((key) => {
44300
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
44381
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
44301
44382
  });
44302
44383
  const esFilter = (key) => key !== '__esModule';
44303
44384
  // Icons
@@ -44313,32 +44394,32 @@ Object.keys(_modules___WEBPACK_IMPORTED_MODULE_4__)
44313
44394
  var _a;
44314
44395
  // @ts-ignore
44315
44396
  const module = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44316
- const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isFunction */ .Tn)((_a = module.prototype) === null || _a === void 0 ? void 0 : _a.className)
44397
+ const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isFunction */ .Tn)((_a = module.prototype) === null || _a === void 0 ? void 0 : _a.className)
44317
44398
  ? module.prototype.className()
44318
44399
  : key;
44319
- if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .Kg)(name)) {
44400
+ if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isString */ .Kg)(name)) {
44320
44401
  console.warn('Module name must be a string', key);
44321
44402
  return;
44322
44403
  }
44323
44404
  // @ts-ignore
44324
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.modules[name] = module;
44405
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.modules[name] = module;
44325
44406
  });
44326
44407
  // Decorators
44327
44408
  Object.keys(_core_decorators__WEBPACK_IMPORTED_MODULE_3__)
44328
44409
  .filter(esFilter)
44329
44410
  .forEach((key) => {
44330
44411
  // @ts-ignore
44331
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
44412
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
44332
44413
  });
44333
44414
  ['Confirm', 'Alert', 'Prompt'].forEach((key) => {
44334
44415
  // @ts-ignore
44335
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44416
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44336
44417
  });
44337
44418
  // Languages
44338
- Object.keys(_languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)
44419
+ Object.keys(_languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)
44339
44420
  .filter(esFilter)
44340
44421
  .forEach((key) => {
44341
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A[key];
44422
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A[key];
44342
44423
  });
44343
44424
 
44344
44425
  class CommitMode {