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