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/es2018/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 = "es2018";
1742
1742
  const IS_ES_MODERN = true;
@@ -9848,10 +9848,14 @@ class Response {
9848
9848
 
9849
9849
  "use strict";
9850
9850
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9851
- /* harmony export */ W: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__.W; }
9851
+ /* harmony export */ Qe: function() { return /* binding */ cursorInTheEdgeOfString; },
9852
+ /* harmony export */ W8: function() { return /* reexport safe */ _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__.W; },
9853
+ /* harmony export */ dY: function() { return /* binding */ findCorrectCurrentNode; }
9852
9854
  /* harmony export */ });
9853
- /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5298);
9854
- /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(83541);
9855
+ /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9856
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(55186);
9857
+ /* harmony import */ var _move_node_inside_start__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5298);
9858
+ /* harmony import */ var _move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(83541);
9855
9859
  /*!
9856
9860
  * Jodit Editor (https://xdsoft.net/jodit/)
9857
9861
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -9864,6 +9868,55 @@ class Response {
9864
9868
 
9865
9869
 
9866
9870
 
9871
+ /**
9872
+ * Check if the cursor is at the edge of the string
9873
+ * @private
9874
+ */
9875
+ function cursorInTheEdgeOfString(container, offset, start, end) {
9876
+ var _a;
9877
+ const text = ((_a = container.nodeValue) === null || _a === void 0 ? void 0 : _a.length) ? container.nodeValue : '';
9878
+ if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
9879
+ return true;
9880
+ }
9881
+ const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
9882
+ return start && ((inv && inv[0].length < offset) || (!inv && offset > 0));
9883
+ }
9884
+ function findCorrectCurrentNode(node, range, rightMode, isCollapsed, checkChild, child) {
9885
+ node = range.startContainer.childNodes[range.startOffset];
9886
+ if (!node) {
9887
+ node = range.startContainer.childNodes[range.startOffset - 1];
9888
+ rightMode = true;
9889
+ }
9890
+ if (node && isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9891
+ // test Current method - Cursor in the left of some SPAN
9892
+ if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node.previousSibling)) {
9893
+ node = node.previousSibling;
9894
+ }
9895
+ else if (checkChild) {
9896
+ let current = child(node);
9897
+ while (current) {
9898
+ if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current)) {
9899
+ node = current;
9900
+ break;
9901
+ }
9902
+ current = child(current);
9903
+ }
9904
+ }
9905
+ }
9906
+ if (node && !isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(node)) {
9907
+ let leftChild = node, rightChild = node;
9908
+ do {
9909
+ leftChild = leftChild.firstChild;
9910
+ rightChild = rightChild.lastChild;
9911
+ } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild));
9912
+ if (leftChild === rightChild && leftChild && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(leftChild)) {
9913
+ node = leftChild;
9914
+ }
9915
+ }
9916
+ return { node, rightMode };
9917
+ }
9918
+
9919
+
9867
9920
  /***/ }),
9868
9921
 
9869
9922
  /***/ 5298:
@@ -9984,7 +10037,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9984
10037
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
9985
10038
  /* harmony export */ L: function() { return /* binding */ Selection; }
9986
10039
  /* harmony export */ });
9987
- /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(31635);
10040
+ /* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(31635);
9988
10041
  /* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(17352);
9989
10042
  /* harmony import */ var jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22664);
9990
10043
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(55186);
@@ -9994,6 +10047,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
9994
10047
  /* 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__);
9995
10048
  /* harmony import */ var jodit_core_selection_helpers_move_the_node_along_the_edge_outward__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83541);
9996
10049
  /* harmony import */ var _style_commit_style__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8757);
10050
+ /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(46602);
9997
10051
  /*!
9998
10052
  * Jodit Editor (https://xdsoft.net/jodit/)
9999
10053
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -10010,6 +10064,7 @@ function moveTheNodeAlongTheEdgeOutward(node, start, root) {
10010
10064
 
10011
10065
 
10012
10066
 
10067
+
10013
10068
  class Selection {
10014
10069
  constructor(jodit) {
10015
10070
  this.jodit = jodit;
@@ -10395,63 +10450,35 @@ class Selection {
10395
10450
  * Returns the current element under the cursor inside editor
10396
10451
  */
10397
10452
  current(checkChild = true) {
10398
- if (this.j.getRealMode() === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10399
- const sel = this.sel;
10400
- if (!sel || sel.rangeCount === 0) {
10401
- return null;
10402
- }
10403
- const range = sel.getRangeAt(0);
10404
- let node = range.startContainer, rightMode = false;
10405
- const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10406
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10407
- return node;
10408
- }
10409
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10410
- node = range.startContainer.childNodes[range.startOffset];
10411
- if (!node) {
10412
- node =
10413
- range.startContainer.childNodes[range.startOffset - 1];
10414
- rightMode = true;
10415
- }
10416
- if (node && sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10417
- // test Current method - Cursor in the left of some SPAN
10418
- if (!rightMode && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node.previousSibling)) {
10419
- node = node.previousSibling;
10420
- }
10421
- else if (checkChild) {
10422
- let current = child(node);
10423
- while (current) {
10424
- if (current && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(current)) {
10425
- node = current;
10426
- break;
10427
- }
10428
- current = child(current);
10429
- }
10430
- }
10431
- }
10432
- if (node && !sel.isCollapsed && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10433
- let leftChild = node, rightChild = node;
10434
- do {
10435
- leftChild = leftChild.firstChild;
10436
- rightChild = rightChild.lastChild;
10437
- } while (leftChild && rightChild && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild));
10438
- if (leftChild === rightChild &&
10439
- leftChild &&
10440
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(leftChild)) {
10441
- node = leftChild;
10442
- }
10443
- }
10444
- }
10445
- // check - cursor inside editor
10446
- if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10447
- return node;
10448
- }
10453
+ if (this.j.getRealMode() !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.MODE_WYSIWYG) {
10454
+ return null;
10455
+ }
10456
+ const sel = this.sel;
10457
+ if (!sel || sel.rangeCount === 0) {
10458
+ return null;
10459
+ }
10460
+ const range = sel.getRangeAt(0);
10461
+ let node = range.startContainer;
10462
+ let rightMode = false;
10463
+ const child = (nd) => rightMode ? nd.lastChild : nd.firstChild;
10464
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(node, 'br') && sel.isCollapsed) {
10465
+ return node;
10466
+ }
10467
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(node)) {
10468
+ const ret = (0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .findCorrectCurrentNode */ .dY)(node, range, rightMode, sel.isCollapsed, checkChild, child);
10469
+ node = ret.node;
10470
+ rightMode = ret.rightMode;
10471
+ }
10472
+ // check - cursor inside editor
10473
+ if (node && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.area, node)) {
10474
+ return node;
10449
10475
  }
10450
10476
  return null;
10451
10477
  }
10452
10478
  /**
10453
10479
  * Insert element in editor
10454
10480
  *
10481
+ * @param node - Node for insert
10455
10482
  * @param insertCursorAfter - After insert, cursor will move after element
10456
10483
  * @param fireChange - After insert, editor fire change event. You can prevent this behavior
10457
10484
  */
@@ -10513,6 +10540,7 @@ class Selection {
10513
10540
  * Inserts in the current cursor position some HTML snippet
10514
10541
  *
10515
10542
  * @param html - HTML The text to be inserted into the document
10543
+ * @param insertCursorAfter - After insert, cursor will move after element
10516
10544
  * @example
10517
10545
  * ```javascript
10518
10546
  * parent.s.insertHTML('<img src="image.png"/>');
@@ -10556,6 +10584,7 @@ class Selection {
10556
10584
  *
10557
10585
  * @param url - URL for image, or HTMLImageElement
10558
10586
  * @param styles - If specified, it will be applied <code>$(image).css(styles)</code>
10587
+ * @param defaultWidth - If specified, it will be applied <code>css('width', defaultWidth)</code>
10559
10588
  */
10560
10589
  insertImage(url, styles = null, defaultWidth = null) {
10561
10590
  const image = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isString */ .Kg)(url) ? this.j.createInside.element('img') : url;
@@ -10611,74 +10640,81 @@ class Selection {
10611
10640
  eachSelection(callback) {
10612
10641
  var _a;
10613
10642
  const sel = this.sel;
10614
- if (sel && sel.rangeCount) {
10615
- const range = sel.getRangeAt(0);
10616
- let root = range.commonAncestorContainer;
10617
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10618
- root = root.parentElement;
10619
- }
10620
- const nodes = [], startOffset = range.startOffset, length = root.childNodes.length, elementOffset = startOffset < length ? startOffset : length - 1;
10621
- let start = range.startContainer === this.area
10622
- ? root.childNodes[elementOffset]
10623
- : range.startContainer, end = range.endContainer === this.area
10624
- ? root.childNodes[range.endOffset - 1]
10625
- : range.endContainer;
10626
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10627
- start === range.startContainer &&
10628
- range.startOffset === ((_a = start.nodeValue) === null || _a === void 0 ? void 0 : _a.length) &&
10629
- start.nextSibling) {
10630
- start = start.nextSibling;
10631
- }
10632
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10633
- end === range.endContainer &&
10634
- range.endOffset === 0 &&
10635
- end.previousSibling) {
10636
- end = end.previousSibling;
10637
- }
10638
- const checkElm = (node) => {
10639
- if (node &&
10640
- node !== root &&
10641
- !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10642
- !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10643
- nodes.push(node);
10644
- }
10645
- };
10646
- checkElm(start);
10647
- if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10648
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10649
- checkElm(node);
10650
- // checks parentElement as well because partial selections are not equal to entire element
10651
- return (node === end ||
10652
- (node && node.contains && node.contains(end)));
10653
- }, root, true, false);
10654
- }
10655
- const forEvery = (current) => {
10656
- if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10657
- return;
10658
- }
10659
- if (current.nodeName.match(/^(UL|OL)$/)) {
10660
- return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10643
+ if (!sel || !sel.rangeCount) {
10644
+ return;
10645
+ }
10646
+ const range = sel.getRangeAt(0);
10647
+ let root = range.commonAncestorContainer;
10648
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isHTMLElement(root)) {
10649
+ root = root.parentElement;
10650
+ }
10651
+ const nodes = [];
10652
+ const startOffset = range.startOffset;
10653
+ const length = root.childNodes.length;
10654
+ const elementOffset = startOffset < length ? startOffset : length - 1;
10655
+ let start = range.startContainer === this.area
10656
+ ? root.childNodes[elementOffset]
10657
+ : range.startContainer;
10658
+ let end = range.endContainer === this.area
10659
+ ? root.childNodes[range.endOffset - 1]
10660
+ : range.endContainer;
10661
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(start) &&
10662
+ start === range.startContainer &&
10663
+ range.startOffset === ((_a = start.nodeValue) === null || _a === void 0 ? void 0 : _a.length) &&
10664
+ start.nextSibling) {
10665
+ start = start.nextSibling;
10666
+ }
10667
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(end) &&
10668
+ end === range.endContainer &&
10669
+ range.endOffset === 0 &&
10670
+ end.previousSibling) {
10671
+ end = end.previousSibling;
10672
+ }
10673
+ const checkElm = (node) => {
10674
+ if (node &&
10675
+ node !== root &&
10676
+ !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(node) &&
10677
+ !(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_4__/* .isMarker */ .rg)(node)) {
10678
+ nodes.push(node);
10679
+ }
10680
+ };
10681
+ checkElm(start);
10682
+ if (start !== end && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(root, start, true)) {
10683
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.find(start, node => {
10684
+ checkElm(node);
10685
+ // checks parentElement as well because partial selections are not equal to entire element
10686
+ return (node === end ||
10687
+ (node && node.contains && node.contains(end)));
10688
+ }, root, true, false);
10689
+ }
10690
+ const forEvery = (current) => {
10691
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(this.j.editor, current, true)) {
10692
+ return;
10693
+ }
10694
+ if (current.nodeName.match(/^(UL|OL)$/)) {
10695
+ return (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.toArray)(current.childNodes).forEach(forEvery);
10696
+ }
10697
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10698
+ if (current.firstChild) {
10699
+ current = current.firstChild;
10661
10700
  }
10662
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(current, 'li')) {
10663
- if (current.firstChild) {
10664
- current = current.firstChild;
10665
- }
10666
- else {
10667
- const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10668
- current.appendChild(currentB);
10669
- current = currentB;
10670
- }
10701
+ else {
10702
+ const currentB = this.j.createInside.text(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE);
10703
+ current.appendChild(currentB);
10704
+ current = currentB;
10671
10705
  }
10672
- callback(current);
10673
- };
10674
- if (nodes.length === 0 && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10706
+ }
10707
+ callback(current);
10708
+ };
10709
+ if (nodes.length === 0) {
10710
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isEmptyTextNode(start)) {
10675
10711
  nodes.push(start);
10676
10712
  }
10677
- if (nodes.length === 0 && start.firstChild) {
10713
+ if (start.firstChild) {
10678
10714
  nodes.push(start.firstChild);
10679
10715
  }
10680
- nodes.forEach(forEvery);
10681
10716
  }
10717
+ nodes.forEach(forEvery);
10682
10718
  }
10683
10719
  /**
10684
10720
  * Checks if the cursor is at the end(start) block
@@ -10690,7 +10726,7 @@ class Selection {
10690
10726
  * @returns true - the cursor is at the end(start) block, null - cursor somewhere outside
10691
10727
  */
10692
10728
  cursorInTheEdge(start, parentBlock, fake = null) {
10693
- var _a, _b;
10729
+ var _a;
10694
10730
  const end = !start, range = (_a = this.sel) === null || _a === void 0 ? void 0 : _a.getRangeAt(0);
10695
10731
  fake !== null && fake !== void 0 ? fake : (fake = this.current(false));
10696
10732
  if (!range || !fake || !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isOrContains(parentBlock, fake, true)) {
@@ -10706,13 +10742,7 @@ class Selection {
10706
10742
  this.j.e.fire('isInvisibleForCursor', elm) === true));
10707
10743
  // check right offset
10708
10744
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isText(container)) {
10709
- const text = ((_b = container.nodeValue) === null || _b === void 0 ? void 0 : _b.length) ? container.nodeValue : '';
10710
- if (end && text.replace((0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_END)(), '').length > offset) {
10711
- return false;
10712
- }
10713
- const inv = (0,jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE_REG_EXP_START)().exec(text);
10714
- if (start &&
10715
- ((inv && inv[0].length < offset) || (!inv && offset > 0))) {
10745
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_8__/* .cursorInTheEdgeOfString */ .Qe)(container, offset, start, end)) {
10716
10746
  return false;
10717
10747
  }
10718
10748
  }
@@ -10801,6 +10831,7 @@ class Selection {
10801
10831
  }
10802
10832
  /**
10803
10833
  * Set cursor in the node
10834
+ * @param node - Node element
10804
10835
  * @param inStart - set cursor in start of element
10805
10836
  */
10806
10837
  setCursorIn(node, inStart = false) {
@@ -10861,6 +10892,7 @@ class Selection {
10861
10892
  }
10862
10893
  /**
10863
10894
  * Select node
10895
+ * @param node - Node element
10864
10896
  * @param inward - select all inside
10865
10897
  */
10866
10898
  select(node, inward = false) {
@@ -11135,19 +11167,19 @@ class Selection {
11135
11167
  return this;
11136
11168
  }
11137
11169
  }
11138
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11170
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11139
11171
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11140
11172
  ], Selection.prototype, "createRange", null);
11141
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11173
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11142
11174
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11143
11175
  ], Selection.prototype, "focus", null);
11144
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11176
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11145
11177
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11146
11178
  ], Selection.prototype, "setCursorAfter", null);
11147
- (0,tslib__WEBPACK_IMPORTED_MODULE_8__/* .__decorate */ .Cg)([
11179
+ (0,tslib__WEBPACK_IMPORTED_MODULE_9__/* .__decorate */ .Cg)([
11148
11180
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_1__.autobind
11149
11181
  ], Selection.prototype, "setCursorBefore", null);
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, "setCursorIn", null);
11153
11185
 
@@ -22362,6 +22394,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22362
22394
  }
22363
22395
  /**
22364
22396
  * Generate formal table martix columns*rows
22397
+ * @param table - Working table
22365
22398
  * @param callback - if return false cycle break
22366
22399
  */
22367
22400
  formalMatrix(table, callback) {
@@ -22431,7 +22464,6 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22431
22464
  * @param line - Insert a new line after/before this
22432
22465
  * line contains the selected cell
22433
22466
  * @param after - Insert a new line after line contains the selected cell
22434
- * @param create - Instance of Create class
22435
22467
  */
22436
22468
  appendRow(table, line, after) {
22437
22469
  return Table.__appendRow(table, line, after, this.j.createInside);
@@ -22600,13 +22632,36 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22600
22632
  return Table.__getSelectedBound(table, selectedCells);
22601
22633
  }
22602
22634
  static __normalizeTable(table) {
22603
- let i, j, min, not;
22604
22635
  const __marked = [], box = Table.__formalMatrix(table);
22605
- // remove extra colspans
22606
- for (j = 0; j < box[0].length; j += 1) {
22607
- min = 1000000;
22608
- not = false;
22609
- for (i = 0; i < box.length; i += 1) {
22636
+ Table.__removeExtraColspans(box, __marked);
22637
+ Table.__removeExtraRowspans(box, __marked);
22638
+ // remove rowspans and colspans equal 1 and empty class
22639
+ for (let i = 0; i < box.length; i += 1) {
22640
+ for (let j = 0; j < box[i].length; j += 1) {
22641
+ if (box[i][j] === undefined) {
22642
+ continue; // broken table
22643
+ }
22644
+ if (box[i][j].hasAttribute('rowspan') &&
22645
+ box[i][j].rowSpan === 1) {
22646
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22647
+ }
22648
+ if (box[i][j].hasAttribute('colspan') &&
22649
+ box[i][j].colSpan === 1) {
22650
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22651
+ }
22652
+ if (box[i][j].hasAttribute('class') &&
22653
+ !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22654
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22655
+ }
22656
+ }
22657
+ }
22658
+ Table.__unmark(__marked);
22659
+ }
22660
+ static __removeExtraColspans(box, __marked) {
22661
+ for (let j = 0; j < box[0].length; j += 1) {
22662
+ let min = 1000000;
22663
+ let not = false;
22664
+ for (let i = 0; i < box.length; i += 1) {
22610
22665
  if (box[i][j] === undefined) {
22611
22666
  continue; // broken table
22612
22667
  }
@@ -22617,7 +22672,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22617
22672
  min = Math.min(min, box[i][j].colSpan);
22618
22673
  }
22619
22674
  if (!not) {
22620
- for (i = 0; i < box.length; i += 1) {
22675
+ for (let i = 0; i < box.length; i += 1) {
22621
22676
  if (box[i][j] === undefined) {
22622
22677
  continue; // broken table
22623
22678
  }
@@ -22625,10 +22680,13 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22625
22680
  }
22626
22681
  }
22627
22682
  }
22628
- // remove extra rowspans
22683
+ }
22684
+ static __removeExtraRowspans(box, marked) {
22685
+ let i = 0;
22686
+ let j = 0;
22629
22687
  for (i = 0; i < box.length; i += 1) {
22630
- min = 1000000;
22631
- not = false;
22688
+ let min = 1000000;
22689
+ let not = false;
22632
22690
  for (j = 0; j < box[i].length; j += 1) {
22633
22691
  if (box[i][j] === undefined) {
22634
22692
  continue; // broken table
@@ -22644,31 +22702,10 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22644
22702
  if (box[i][j] === undefined) {
22645
22703
  continue; // broken table
22646
22704
  }
22647
- Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, __marked);
22648
- }
22649
- }
22650
- }
22651
- // remove rowspans and colspans equal 1 and empty class
22652
- for (i = 0; i < box.length; i += 1) {
22653
- for (j = 0; j < box[i].length; j += 1) {
22654
- if (box[i][j] === undefined) {
22655
- continue; // broken table
22656
- }
22657
- if (box[i][j].hasAttribute('rowspan') &&
22658
- box[i][j].rowSpan === 1) {
22659
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22660
- }
22661
- if (box[i][j].hasAttribute('colspan') &&
22662
- box[i][j].colSpan === 1) {
22663
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22664
- }
22665
- if (box[i][j].hasAttribute('class') &&
22666
- !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22667
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22705
+ Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, marked);
22668
22706
  }
22669
22707
  }
22670
22708
  }
22671
- Table.__unmark(__marked);
22672
22709
  }
22673
22710
  /**
22674
22711
  * Try recalculate all coluns and rows after change
@@ -24100,34 +24137,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24100
24137
  }
24101
24138
  const promises = [];
24102
24139
  if (o.insertImageAsBase64URI) {
24103
- let file, i;
24104
- for (i = 0; i < fileList.length; i += 1) {
24105
- file = fileList[i];
24106
- if (file && file.type) {
24107
- const mime = file.type.match(/\/([a-z0-9]+)/i);
24108
- const extension = mime[1] ? mime[1].toLowerCase() : '';
24109
- if (o.imagesExtensions.includes(extension)) {
24110
- const reader = new FileReader();
24111
- promises.push(uploader.j.async.promise((resolve, reject) => {
24112
- reader.onerror = reject;
24113
- reader.onloadend = () => {
24114
- const resp = {
24115
- baseurl: '',
24116
- files: [reader.result],
24117
- isImages: [true]
24118
- };
24119
- const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24120
- ? handlerSuccess
24121
- : o.defaultHandlerSuccess;
24122
- handler.call(uploader, resp);
24123
- resolve(resp);
24124
- };
24125
- reader.readAsDataURL(file);
24126
- }));
24127
- fileList[i] = null;
24128
- }
24129
- }
24130
- }
24140
+ readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
24131
24141
  }
24132
24142
  fileList = fileList.filter(a => a);
24133
24143
  if (fileList.length) {
@@ -24138,7 +24148,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24138
24148
  for (let i = 0; i < fileList.length; i += 1) {
24139
24149
  file = fileList[i];
24140
24150
  if (file) {
24141
- const hasRealExtension = /\.[\d\w]+$/.test(file.name);
24151
+ const hasRealExtension = /\.\w+$/.test(file.name);
24142
24152
  const mime = file.type.match(/\/([a-z0-9]+)/i);
24143
24153
  const extension = mime && mime[1] ? mime[1].toLowerCase() : '';
24144
24154
  let newName = fileList[i].name ||
@@ -24187,6 +24197,37 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24187
24197
  }
24188
24198
  return Promise.all(promises);
24189
24199
  }
24200
+ function readImagesWithReader(fileList, imagesExtensions, promises, uploader, handlerSuccess, defaultHandlerSuccess) {
24201
+ let file, i;
24202
+ for (i = 0; i < fileList.length; i += 1) {
24203
+ file = fileList[i];
24204
+ if (file && file.type) {
24205
+ const mime = file.type.match(/\/([a-z0-9]+)/i);
24206
+ const extension = mime[1] ? mime[1].toLowerCase() : '';
24207
+ if (!imagesExtensions.includes(extension)) {
24208
+ continue;
24209
+ }
24210
+ const reader = new FileReader();
24211
+ promises.push(uploader.j.async.promise((resolve, reject) => {
24212
+ reader.onerror = reject;
24213
+ reader.onloadend = () => {
24214
+ const resp = {
24215
+ baseurl: '',
24216
+ files: [reader.result],
24217
+ isImages: [true]
24218
+ };
24219
+ const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24220
+ ? handlerSuccess
24221
+ : defaultHandlerSuccess;
24222
+ handler.call(uploader, resp);
24223
+ resolve(resp);
24224
+ };
24225
+ reader.readAsDataURL(file);
24226
+ }));
24227
+ fileList[i] = null;
24228
+ }
24229
+ }
24230
+ }
24190
24231
 
24191
24232
 
24192
24233
  /***/ }),
@@ -25806,7 +25847,7 @@ class backspace extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_3__/* .Plugin
25806
25847
  if (jodit.e.fire('backSpaceBeforeCases', backspace, fakeNode)) {
25807
25848
  return false;
25808
25849
  }
25809
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
25850
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
25810
25851
  if (_cases__WEBPACK_IMPORTED_MODULE_6__/* .cases */ .C.some((func) => {
25811
25852
  if ((0,jodit_core_helpers_checker_is_function__WEBPACK_IMPORTED_MODULE_8__/* .isFunction */ .T)(func) &&
25812
25853
  func(jodit, fakeNode, backspace, mode)) {
@@ -26065,22 +26106,15 @@ function checkNotCollapsed(jodit) {
26065
26106
  * @private
26066
26107
  */
26067
26108
  function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26068
- var _a, _b, _c;
26109
+ var _a, _b;
26069
26110
  const step = backspace ? -1 : 1;
26070
26111
  const anotherSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, !backspace);
26071
- let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace), removeNeighbor = null;
26072
- let charRemoved = false, removed;
26073
- const getNextInlineSibling = (sibling) => {
26074
- let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
26075
- if (!nextSibling &&
26076
- sibling.parentNode &&
26077
- sibling.parentNode !== jodit.editor) {
26078
- nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, jodit.editor, true);
26079
- }
26080
- return nextSibling;
26081
- };
26112
+ let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace);
26113
+ let removeNeighbor = null;
26114
+ let charRemoved = false;
26115
+ let removed;
26082
26116
  if (!sibling) {
26083
- sibling = getNextInlineSibling(fakeNode);
26117
+ sibling = getNextInlineSibling(fakeNode, backspace, jodit.editor);
26084
26118
  }
26085
26119
  while (sibling && (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(sibling) || jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling))) {
26086
26120
  while (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling)) {
@@ -26090,57 +26124,17 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26090
26124
  break;
26091
26125
  }
26092
26126
  if ((_a = sibling.nodeValue) === null || _a === void 0 ? void 0 : _a.length) {
26093
- // For Unicode escapes
26094
- let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26095
- const length = value.length;
26096
- let index = backspace ? length - 1 : 0;
26097
- if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26098
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26099
- index += step;
26100
- }
26101
- }
26102
- removed = value[index];
26103
- if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26104
- index += step;
26105
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26106
- index += step;
26107
- }
26108
- index += backspace ? 1 : -1;
26109
- }
26110
- if (backspace && index < 0) {
26111
- value = [];
26112
- }
26113
- else {
26114
- value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26115
- }
26116
- if (!anotherSibling ||
26117
- !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26118
- (!backspace ? / $/ : /^ /).test((_b = anotherSibling.nodeValue) !== null && _b !== void 0 ? _b : '') ||
26119
- !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26120
- for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26121
- if (value[i] === ' ') {
26122
- value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26123
- }
26124
- else {
26125
- break;
26126
- }
26127
- }
26128
- }
26129
- sibling.nodeValue = value.join('');
26127
+ removed = tryRemoveChar(sibling, backspace, step, anotherSibling);
26130
26128
  }
26131
- if (!((_c = sibling.nodeValue) === null || _c === void 0 ? void 0 : _c.length)) {
26129
+ if (!((_b = sibling.nodeValue) === null || _b === void 0 ? void 0 : _b.length)) {
26132
26130
  removeNeighbor = sibling;
26133
26131
  }
26134
26132
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.isVoid)(removed) && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26133
+ checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit);
26135
26134
  charRemoved = true;
26136
- (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);
26137
- if (mode === 'sentence' ||
26138
- (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26139
- checkRemoveChar(jodit, fakeNode, backspace, mode);
26140
- }
26141
26135
  break;
26142
26136
  }
26143
- const nextSibling = getNextInlineSibling(sibling);
26137
+ const nextSibling = getNextInlineSibling(sibling, backspace, jodit.editor);
26144
26138
  if (removeNeighbor) {
26145
26139
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.safeRemove(removeNeighbor);
26146
26140
  removeNeighbor = null;
@@ -26162,6 +26156,13 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26162
26156
  }
26163
26157
  return charRemoved;
26164
26158
  }
26159
+ function getNextInlineSibling(sibling, backspace, root) {
26160
+ let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
26161
+ if (!nextSibling && sibling.parentNode && sibling.parentNode !== root) {
26162
+ nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, root, true);
26163
+ }
26164
+ return nextSibling;
26165
+ }
26165
26166
  /**
26166
26167
  * Helper removes all empty inline parents
26167
26168
  */
@@ -26186,6 +26187,57 @@ function addBRInsideEmptyBlock(jodit, node) {
26186
26187
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after(node, jodit.createInside.element('br'));
26187
26188
  }
26188
26189
  }
26190
+ function tryRemoveChar(sibling, backspace, step, anotherSibling) {
26191
+ // For Unicode escapes
26192
+ let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26193
+ const length = value.length;
26194
+ let index = backspace ? length - 1 : 0;
26195
+ if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26196
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26197
+ index += step;
26198
+ }
26199
+ }
26200
+ const removed = value[index];
26201
+ if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26202
+ index += step;
26203
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26204
+ index += step;
26205
+ }
26206
+ index += backspace ? 1 : -1;
26207
+ }
26208
+ if (backspace && index < 0) {
26209
+ value = [];
26210
+ }
26211
+ else {
26212
+ value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26213
+ }
26214
+ replaceSpaceOnNBSP(anotherSibling, backspace, value);
26215
+ sibling.nodeValue = value.join('');
26216
+ return removed;
26217
+ }
26218
+ function replaceSpaceOnNBSP(anotherSibling, backspace, value) {
26219
+ var _a;
26220
+ if (!anotherSibling ||
26221
+ !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26222
+ (!backspace ? / $/ : /^ /).test((_a = anotherSibling.nodeValue) !== null && _a !== void 0 ? _a : '') ||
26223
+ !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26224
+ for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26225
+ if (value[i] === ' ') {
26226
+ value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26227
+ }
26228
+ else {
26229
+ break;
26230
+ }
26231
+ }
26232
+ }
26233
+ }
26234
+ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit) {
26235
+ (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);
26236
+ if (mode === 'sentence' ||
26237
+ (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26238
+ checkRemoveChar(jodit, fakeNode, backspace, mode);
26239
+ }
26240
+ }
26189
26241
 
26190
26242
 
26191
26243
  /***/ }),
@@ -26223,7 +26275,7 @@ function checkRemoveContentNotEditable(jodit, fakeNode, backspace) {
26223
26275
  !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isContentEditable(neighbor, jodit.editor)) {
26224
26276
  (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);
26225
26277
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.safeRemove(neighbor);
26226
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
26278
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
26227
26279
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit.s.setCursorBefore : jodit.s.setCursorAfter, fakeNode);
26228
26280
  return true;
26229
26281
  }
@@ -29085,45 +29137,11 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
29085
29137
  const sel = this.j.s.sel;
29086
29138
  const range = this.bufferRange ||
29087
29139
  (sel && sel.rangeCount ? sel.getRangeAt(0) : null);
29088
- let fragment = null;
29089
- if (!this.draggable && range) {
29090
- fragment = this.isCopyMode
29091
- ? range.cloneContents()
29092
- : range.extractContents();
29093
- }
29094
- else if (this.draggable) {
29095
- if (this.isCopyMode) {
29096
- const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
29097
- ? ['a', 'href']
29098
- : ['img', 'src'];
29099
- fragment = this.j.createInside.element(tagName);
29100
- fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
29101
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
29102
- '');
29103
- if (tagName === 'a') {
29104
- fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
29105
- }
29106
- }
29107
- else {
29108
- fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
29109
- }
29110
- }
29111
- else if (this.getText(event)) {
29112
- fragment = this.j.createInside.fromHTML(this.getText(event));
29113
- }
29140
+ const fragment = this.__getWorkFragment(range, event);
29114
29141
  sel && sel.removeAllRanges();
29115
29142
  this.j.s.insertCursorAtPoint(event.clientX, event.clientY);
29116
29143
  if (fragment) {
29117
- this.j.s.insertNode(fragment, false, false);
29118
- if (range && fragment.firstChild && fragment.lastChild) {
29119
- range.setStartBefore(fragment.firstChild);
29120
- range.setEndAfter(fragment.lastChild);
29121
- this.j.s.selectRange(range);
29122
- this.j.e.fire('synchro');
29123
- }
29124
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
29125
- this.j.e.fire('afterInsertImage', fragment);
29126
- }
29144
+ this.__insertFragment.call(this, fragment, range);
29127
29145
  }
29128
29146
  event.preventDefault();
29129
29147
  event.stopPropagation();
@@ -29131,6 +29149,47 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
29131
29149
  this.isFragmentFromEditor = false;
29132
29150
  this.removeDragListeners();
29133
29151
  }
29152
+ __getWorkFragment(range, event) {
29153
+ let fragment = null;
29154
+ if (!this.draggable && range) {
29155
+ fragment = this.isCopyMode
29156
+ ? range.cloneContents()
29157
+ : range.extractContents();
29158
+ }
29159
+ else if (this.draggable) {
29160
+ if (this.isCopyMode) {
29161
+ const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
29162
+ ? ['a', 'href']
29163
+ : ['img', 'src'];
29164
+ fragment = this.j.createInside.element(tagName);
29165
+ fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
29166
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
29167
+ '');
29168
+ if (tagName === 'a') {
29169
+ fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
29170
+ }
29171
+ }
29172
+ else {
29173
+ fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
29174
+ }
29175
+ }
29176
+ else if (this.getText(event)) {
29177
+ fragment = this.j.createInside.fromHTML(this.getText(event));
29178
+ }
29179
+ return fragment;
29180
+ }
29181
+ __insertFragment(fragment, range) {
29182
+ this.j.s.insertNode(fragment, false, false);
29183
+ if (range && fragment.firstChild && fragment.lastChild) {
29184
+ range.setStartBefore(fragment.firstChild);
29185
+ range.setEndAfter(fragment.lastChild);
29186
+ this.j.s.selectRange(range);
29187
+ this.j.e.fire('synchro');
29188
+ }
29189
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
29190
+ this.j.e.fire('afterInsertImage', fragment);
29191
+ }
29192
+ }
29134
29193
  /** @override */
29135
29194
  beforeDestruct() {
29136
29195
  this.onDragEnd();
@@ -34853,35 +34912,7 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34853
34912
  if (link) {
34854
34913
  url_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
34855
34914
  if (modeClassName) {
34856
- switch (modeClassName) {
34857
- case 'input':
34858
- if (className_input) {
34859
- className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34860
- }
34861
- break;
34862
- case 'select':
34863
- if (className_select) {
34864
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
34865
- const option = className_select.options.item(i);
34866
- if (option) {
34867
- option.selected = false;
34868
- }
34869
- }
34870
- const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34871
- classNames.split(' ').forEach(className => {
34872
- if (className) {
34873
- for (let i = 0; i < className_select.options.length; i++) {
34874
- const option = className_select.options.item(i);
34875
- if ((option === null || option === void 0 ? void 0 : option.value) &&
34876
- option.value === className) {
34877
- option.selected = true;
34878
- }
34879
- }
34880
- }
34881
- });
34882
- }
34883
- break;
34884
- }
34915
+ readClassnames(modeClassName, className_input, link, className_select);
34885
34916
  }
34886
34917
  if (openInNewTabCheckbox && target_checkbox) {
34887
34918
  target_checkbox.checked = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
@@ -34942,44 +34973,10 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34942
34973
  links = [link];
34943
34974
  }
34944
34975
  links.forEach(a => {
34945
- var _a;
34946
34976
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', url_input.value);
34947
- if (modeClassName && (className_input !== null && className_input !== void 0 ? className_input : className_select)) {
34948
- if (modeClassName === 'input') {
34949
- if (className_input.value === '' &&
34950
- a.hasAttribute('class')) {
34951
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34952
- }
34953
- if (className_input.value !== '') {
34954
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34955
- }
34956
- }
34957
- else if (modeClassName === 'select') {
34958
- if (a.hasAttribute('class')) {
34959
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34960
- }
34961
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
34962
- const className = (_a = className_select.selectedOptions.item(i)) === null || _a === void 0 ? void 0 : _a.value;
34963
- if (className) {
34964
- a.classList.add(className);
34965
- }
34966
- }
34967
- }
34968
- }
34977
+ writeClasses(modeClassName, className_input, className_select, a);
34969
34978
  if (!isImageContent) {
34970
- let newContent = a.textContent;
34971
- if (content_input.value.trim().length) {
34972
- if (textWasChanged) {
34973
- newContent = content_input.value;
34974
- }
34975
- }
34976
- else {
34977
- newContent = url_input.value;
34978
- }
34979
- const content = a.textContent;
34980
- if (newContent !== content) {
34981
- a.textContent = newContent;
34982
- }
34979
+ writeImage(a, content_input, textWasChanged, url_input);
34983
34980
  }
34984
34981
  if (openInNewTabCheckbox && target_checkbox) {
34985
34982
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
@@ -35024,6 +35021,75 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
35024
35021
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_0__.autobind
35025
35022
  ], link.prototype, "__generateForm", null);
35026
35023
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('link', link);
35024
+ function writeClasses(modeClassName, className_input, className_select, a) {
35025
+ var _a;
35026
+ if (modeClassName && (className_input !== null && className_input !== void 0 ? className_input : className_select)) {
35027
+ if (modeClassName === 'input') {
35028
+ if (className_input.value === '' && a.hasAttribute('class')) {
35029
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
35030
+ }
35031
+ if (className_input.value !== '') {
35032
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
35033
+ }
35034
+ }
35035
+ else if (modeClassName === 'select') {
35036
+ if (a.hasAttribute('class')) {
35037
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
35038
+ }
35039
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
35040
+ const className = (_a = className_select.selectedOptions.item(i)) === null || _a === void 0 ? void 0 : _a.value;
35041
+ if (className) {
35042
+ a.classList.add(className);
35043
+ }
35044
+ }
35045
+ }
35046
+ }
35047
+ }
35048
+ function readClassnames(modeClassName, className_input, link, className_select) {
35049
+ switch (modeClassName) {
35050
+ case 'input':
35051
+ if (className_input) {
35052
+ className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
35053
+ }
35054
+ break;
35055
+ case 'select':
35056
+ if (className_select) {
35057
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
35058
+ const option = className_select.options.item(i);
35059
+ if (option) {
35060
+ option.selected = false;
35061
+ }
35062
+ }
35063
+ const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
35064
+ classNames.split(' ').forEach(className => {
35065
+ if (className) {
35066
+ for (let i = 0; i < className_select.options.length; i++) {
35067
+ const option = className_select.options.item(i);
35068
+ if ((option === null || option === void 0 ? void 0 : option.value) && option.value === className) {
35069
+ option.selected = true;
35070
+ }
35071
+ }
35072
+ }
35073
+ });
35074
+ }
35075
+ break;
35076
+ }
35077
+ }
35078
+ function writeImage(a, content_input, textWasChanged, url_input) {
35079
+ let newContent = a.textContent;
35080
+ if (content_input.value.trim().length) {
35081
+ if (textWasChanged) {
35082
+ newContent = content_input.value;
35083
+ }
35084
+ }
35085
+ else {
35086
+ newContent = url_input.value;
35087
+ }
35088
+ const content = a.textContent;
35089
+ if (newContent !== content) {
35090
+ a.textContent = newContent;
35091
+ }
35092
+ }
35027
35093
 
35028
35094
 
35029
35095
  /***/ }),
@@ -37863,7 +37929,6 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__/* .Config */ .T.prototype.controls.fin
37863
37929
  /* harmony export */ _B: function() { return /* binding */ highlightTextRanges; },
37864
37930
  /* harmony export */ zy: function() { return /* binding */ getSelectionWrappers; }
37865
37931
  /* harmony export */ });
37866
- /* unused harmony export isSelectionWrapper */
37867
37932
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55186);
37868
37933
  /* harmony import */ var jodit_core_helpers_utils_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58720);
37869
37934
  /*!
@@ -37885,60 +37950,14 @@ function highlightTextRanges(jodit, rng, restRanges, ci, root) {
37885
37950
  rng.endContainer.nodeValue == null) {
37886
37951
  return;
37887
37952
  }
37888
- if (jodit.o.search.useCustomHighlightAPI &&
37889
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37890
- typeof window.Highlight !== 'undefined') {
37891
- const ranges = [rng, ...restRanges].map(rng => {
37892
- const range = jodit.selection.createRange();
37893
- range.setStart(rng.startContainer, rng.startOffset);
37894
- range.setEnd(rng.endContainer, rng.endOffset);
37895
- return range;
37896
- });
37897
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37898
- const searchHighlight = new Highlight(...ranges);
37899
- // @ts-ignore
37900
- CSS.highlights.clear();
37901
- // @ts-ignore
37902
- CSS.highlights.set('jodit-search-result', searchHighlight);
37903
- restRanges.length = 0;
37953
+ if (checkNativeSelectionMethod(jodit, rng, restRanges)) {
37904
37954
  return;
37905
37955
  }
37906
37956
  const span = ci.element('span', {
37907
37957
  [TMP_ATTR]: true
37908
37958
  });
37909
37959
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.markTemporary(span);
37910
- const startText = rng.startContainer.nodeValue;
37911
- let diff = 0;
37912
- if (rng.startOffset !== 0) {
37913
- const text = ci.text(startText.substring(0, rng.startOffset));
37914
- rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37915
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37916
- if (rng.startContainer === rng.endContainer) {
37917
- diff = rng.startOffset;
37918
- rng.endOffset -= diff;
37919
- }
37920
- rng.startOffset = 0;
37921
- }
37922
- const endText = rng.endContainer.nodeValue;
37923
- if (rng.endOffset !== endText.length) {
37924
- const text = ci.text(endText.substring(rng.endOffset));
37925
- rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37926
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37927
- for (const range of restRanges) {
37928
- if (range.startContainer === rng.endContainer) {
37929
- range.startContainer = text;
37930
- range.startOffset = range.startOffset - rng.endOffset - diff;
37931
- if (range.endContainer === rng.endContainer) {
37932
- range.endContainer = text;
37933
- range.endOffset = range.endOffset - rng.endOffset - diff;
37934
- }
37935
- }
37936
- else {
37937
- break;
37938
- }
37939
- }
37940
- rng.endOffset = rng.endContainer.nodeValue.length;
37941
- }
37960
+ normalizeRanges(rng, restRanges, ci);
37942
37961
  let next = rng.startContainer;
37943
37962
  do {
37944
37963
  if (!next) {
@@ -37984,6 +38003,61 @@ function clearSelectionWrappersFromHTML(root) {
37984
38003
  function isSelectionWrapper(node) {
37985
38004
  return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isElement(node) && node.hasAttribute(TMP_ATTR);
37986
38005
  }
38006
+ function checkNativeSelectionMethod(jodit, rng, restRanges) {
38007
+ if (jodit.o.search.useCustomHighlightAPI &&
38008
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
38009
+ typeof window.Highlight !== 'undefined') {
38010
+ const ranges = [rng, ...restRanges].map(rng => {
38011
+ const range = jodit.selection.createRange();
38012
+ range.setStart(rng.startContainer, rng.startOffset);
38013
+ range.setEnd(rng.endContainer, rng.endOffset);
38014
+ return range;
38015
+ });
38016
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
38017
+ const searchHighlight = new Highlight(...ranges);
38018
+ // @ts-ignore
38019
+ CSS.highlights.clear();
38020
+ // @ts-ignore
38021
+ CSS.highlights.set('jodit-search-result', searchHighlight);
38022
+ restRanges.length = 0;
38023
+ return true;
38024
+ }
38025
+ return false;
38026
+ }
38027
+ function normalizeRanges(rng, restRanges, ci) {
38028
+ const startText = rng.startContainer.nodeValue;
38029
+ let diff = 0;
38030
+ if (rng.startOffset !== 0) {
38031
+ const text = ci.text(startText.substring(0, rng.startOffset));
38032
+ rng.startContainer.nodeValue = startText.substring(rng.startOffset);
38033
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
38034
+ if (rng.startContainer === rng.endContainer) {
38035
+ diff = rng.startOffset;
38036
+ rng.endOffset -= diff;
38037
+ }
38038
+ rng.startOffset = 0;
38039
+ }
38040
+ const endText = rng.endContainer.nodeValue;
38041
+ if (rng.endOffset !== endText.length) {
38042
+ const text = ci.text(endText.substring(rng.endOffset));
38043
+ rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
38044
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
38045
+ for (const range of restRanges) {
38046
+ if (range.startContainer === rng.endContainer) {
38047
+ range.startContainer = text;
38048
+ range.startOffset = range.startOffset - rng.endOffset - diff;
38049
+ if (range.endContainer === rng.endContainer) {
38050
+ range.endContainer = text;
38051
+ range.endOffset = range.endOffset - rng.endOffset - diff;
38052
+ }
38053
+ }
38054
+ else {
38055
+ break;
38056
+ }
38057
+ }
38058
+ rng.endOffset = rng.endContainer.nodeValue.length;
38059
+ }
38060
+ }
37987
38061
 
37988
38062
 
37989
38063
  /***/ }),
@@ -42185,38 +42259,10 @@ function tableKeyboardNavigation(editor) {
42185
42259
  .off('.tableKeyboardNavigation')
42186
42260
  .on('keydown.tableKeyboardNavigation', (event) => {
42187
42261
  const { key } = event;
42188
- if (!WORK_KEYS.has(key)) {
42189
- return;
42190
- }
42191
- const current = editor.s.current();
42192
- if (!current) {
42193
- return;
42194
- }
42195
- 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);
42262
+ const cell = findCell(editor, key);
42196
42263
  if (!cell) {
42197
42264
  return;
42198
42265
  }
42199
- const { range } = editor.s;
42200
- if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
42201
- const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
42202
- 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
42203
- ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
42204
- : Boolean(elm), cell);
42205
- if ((!isNextDirection &&
42206
- (hasNext ||
42207
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
42208
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42209
- range.startOffset !== 0))) ||
42210
- (isNextDirection &&
42211
- (hasNext ||
42212
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
42213
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42214
- current.nodeValue &&
42215
- range.startOffset !==
42216
- current.nodeValue.length)))) {
42217
- return;
42218
- }
42219
- }
42220
42266
  const tableModule = editor.getInstance(jodit_modules_table_table__WEBPACK_IMPORTED_MODULE_4__/* .Table */ .X, editor.o);
42221
42267
  const table = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.closest(cell, 'table', editor.editor);
42222
42268
  let next = null;
@@ -42274,6 +42320,40 @@ function tableKeyboardNavigation(editor) {
42274
42320
  });
42275
42321
  }
42276
42322
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('tableKeyboardNavigation', tableKeyboardNavigation);
42323
+ function findCell(editor, key) {
42324
+ if (!WORK_KEYS.has(key)) {
42325
+ return;
42326
+ }
42327
+ const current = editor.s.current();
42328
+ if (!current) {
42329
+ return;
42330
+ }
42331
+ 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);
42332
+ if (!cell) {
42333
+ return;
42334
+ }
42335
+ const { range } = editor.s;
42336
+ if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
42337
+ const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
42338
+ 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
42339
+ ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
42340
+ : Boolean(elm), cell);
42341
+ if ((!isNextDirection &&
42342
+ (hasNext ||
42343
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
42344
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42345
+ range.startOffset !== 0))) ||
42346
+ (isNextDirection &&
42347
+ (hasNext ||
42348
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
42349
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
42350
+ current.nodeValue &&
42351
+ range.startOffset !== current.nodeValue.length)))) {
42352
+ return;
42353
+ }
42354
+ }
42355
+ return cell;
42356
+ }
42277
42357
 
42278
42358
 
42279
42359
  /***/ }),
@@ -44324,16 +44404,16 @@ var __webpack_exports__ = {};
44324
44404
  __webpack_require__.r(__webpack_exports__);
44325
44405
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
44326
44406
  /* harmony export */ CommitMode: function() { return /* binding */ CommitMode; },
44327
- /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_6__.x; }
44407
+ /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_0__.x; }
44328
44408
  /* harmony export */ });
44329
- /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9823);
44330
- /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88222);
44409
+ /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46173);
44410
+ /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9823);
44331
44411
  /* harmony import */ var _core_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17352);
44332
44412
  /* harmony import */ var _core_decorators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22664);
44333
44413
  /* harmony import */ var _modules___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37435);
44334
44414
  /* harmony import */ var _styles_icons___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79721);
44335
- /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46173);
44336
- /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74470);
44415
+ /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74470);
44416
+ /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88222);
44337
44417
  /*!
44338
44418
  * Jodit Editor (https://xdsoft.net/jodit/)
44339
44419
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -44344,6 +44424,7 @@ __webpack_require__.r(__webpack_exports__);
44344
44424
  * @packageDocumentation
44345
44425
  * @module jodit
44346
44426
  */
44427
+ // eslint-disable-next-line simple-import-sort/imports
44347
44428
 
44348
44429
 
44349
44430
 
@@ -44356,7 +44437,7 @@ __webpack_require__.r(__webpack_exports__);
44356
44437
 
44357
44438
  // copy constants in Jodit
44358
44439
  Object.keys(_core_constants__WEBPACK_IMPORTED_MODULE_2__).forEach((key) => {
44359
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
44440
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
44360
44441
  });
44361
44442
  const esFilter = (key) => key !== '__esModule';
44362
44443
  // Icons
@@ -44372,32 +44453,32 @@ Object.keys(_modules___WEBPACK_IMPORTED_MODULE_4__)
44372
44453
  var _a;
44373
44454
  // @ts-ignore
44374
44455
  const module = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44375
- const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isFunction */ .Tn)((_a = module.prototype) === null || _a === void 0 ? void 0 : _a.className)
44456
+ const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isFunction */ .Tn)((_a = module.prototype) === null || _a === void 0 ? void 0 : _a.className)
44376
44457
  ? module.prototype.className()
44377
44458
  : key;
44378
- if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .Kg)(name)) {
44459
+ if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isString */ .Kg)(name)) {
44379
44460
  console.warn('Module name must be a string', key);
44380
44461
  return;
44381
44462
  }
44382
44463
  // @ts-ignore
44383
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.modules[name] = module;
44464
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.modules[name] = module;
44384
44465
  });
44385
44466
  // Decorators
44386
44467
  Object.keys(_core_decorators__WEBPACK_IMPORTED_MODULE_3__)
44387
44468
  .filter(esFilter)
44388
44469
  .forEach((key) => {
44389
44470
  // @ts-ignore
44390
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
44471
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
44391
44472
  });
44392
44473
  ['Confirm', 'Alert', 'Prompt'].forEach((key) => {
44393
44474
  // @ts-ignore
44394
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44475
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
44395
44476
  });
44396
44477
  // Languages
44397
- Object.keys(_languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)
44478
+ Object.keys(_languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)
44398
44479
  .filter(esFilter)
44399
44480
  .forEach((key) => {
44400
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A[key];
44481
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A[key];
44401
44482
  });
44402
44483
 
44403
44484
  class CommitMode {