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
@@ -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
 
@@ -22271,6 +22307,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22271
22307
  }
22272
22308
  /**
22273
22309
  * Generate formal table martix columns*rows
22310
+ * @param table - Working table
22274
22311
  * @param callback - if return false cycle break
22275
22312
  */
22276
22313
  formalMatrix(table, callback) {
@@ -22339,7 +22376,6 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22339
22376
  * @param line - Insert a new line after/before this
22340
22377
  * line contains the selected cell
22341
22378
  * @param after - Insert a new line after line contains the selected cell
22342
- * @param create - Instance of Create class
22343
22379
  */
22344
22380
  appendRow(table, line, after) {
22345
22381
  return Table.__appendRow(table, line, after, this.j.createInside);
@@ -22508,13 +22544,36 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22508
22544
  return Table.__getSelectedBound(table, selectedCells);
22509
22545
  }
22510
22546
  static __normalizeTable(table) {
22511
- let i, j, min, not;
22512
22547
  const __marked = [], box = Table.__formalMatrix(table);
22513
- // remove extra colspans
22514
- for (j = 0; j < box[0].length; j += 1) {
22515
- min = 1000000;
22516
- not = false;
22517
- for (i = 0; i < box.length; i += 1) {
22548
+ Table.__removeExtraColspans(box, __marked);
22549
+ Table.__removeExtraRowspans(box, __marked);
22550
+ // remove rowspans and colspans equal 1 and empty class
22551
+ for (let i = 0; i < box.length; i += 1) {
22552
+ for (let j = 0; j < box[i].length; j += 1) {
22553
+ if (box[i][j] === undefined) {
22554
+ continue; // broken table
22555
+ }
22556
+ if (box[i][j].hasAttribute('rowspan') &&
22557
+ box[i][j].rowSpan === 1) {
22558
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22559
+ }
22560
+ if (box[i][j].hasAttribute('colspan') &&
22561
+ box[i][j].colSpan === 1) {
22562
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22563
+ }
22564
+ if (box[i][j].hasAttribute('class') &&
22565
+ !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22566
+ (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22567
+ }
22568
+ }
22569
+ }
22570
+ Table.__unmark(__marked);
22571
+ }
22572
+ static __removeExtraColspans(box, __marked) {
22573
+ for (let j = 0; j < box[0].length; j += 1) {
22574
+ let min = 1000000;
22575
+ let not = false;
22576
+ for (let i = 0; i < box.length; i += 1) {
22518
22577
  if (box[i][j] === undefined) {
22519
22578
  continue; // broken table
22520
22579
  }
@@ -22525,7 +22584,7 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22525
22584
  min = Math.min(min, box[i][j].colSpan);
22526
22585
  }
22527
22586
  if (!not) {
22528
- for (i = 0; i < box.length; i += 1) {
22587
+ for (let i = 0; i < box.length; i += 1) {
22529
22588
  if (box[i][j] === undefined) {
22530
22589
  continue; // broken table
22531
22590
  }
@@ -22533,10 +22592,13 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22533
22592
  }
22534
22593
  }
22535
22594
  }
22536
- // remove extra rowspans
22595
+ }
22596
+ static __removeExtraRowspans(box, marked) {
22597
+ let i = 0;
22598
+ let j = 0;
22537
22599
  for (i = 0; i < box.length; i += 1) {
22538
- min = 1000000;
22539
- not = false;
22600
+ let min = 1000000;
22601
+ let not = false;
22540
22602
  for (j = 0; j < box[i].length; j += 1) {
22541
22603
  if (box[i][j] === undefined) {
22542
22604
  continue; // broken table
@@ -22552,31 +22614,10 @@ class Table extends jodit_core_component__WEBPACK_IMPORTED_MODULE_0__/* .ViewCom
22552
22614
  if (box[i][j] === undefined) {
22553
22615
  continue; // broken table
22554
22616
  }
22555
- Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, __marked);
22556
- }
22557
- }
22558
- }
22559
- // remove rowspans and colspans equal 1 and empty class
22560
- for (i = 0; i < box.length; i += 1) {
22561
- for (j = 0; j < box[i].length; j += 1) {
22562
- if (box[i][j] === undefined) {
22563
- continue; // broken table
22564
- }
22565
- if (box[i][j].hasAttribute('rowspan') &&
22566
- box[i][j].rowSpan === 1) {
22567
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'rowspan', null);
22568
- }
22569
- if (box[i][j].hasAttribute('colspan') &&
22570
- box[i][j].colSpan === 1) {
22571
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'colspan', null);
22572
- }
22573
- if (box[i][j].hasAttribute('class') &&
22574
- !(0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class')) {
22575
- (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_5__.attr)(box[i][j], 'class', null);
22617
+ Table.__mark(box[i][j], 'rowspan', box[i][j].rowSpan - min + 1, marked);
22576
22618
  }
22577
22619
  }
22578
22620
  }
22579
- Table.__unmark(__marked);
22580
22621
  }
22581
22622
  /**
22582
22623
  * Try recalculate all coluns and rows after change
@@ -23994,34 +24035,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
23994
24035
  }
23995
24036
  const promises = [];
23996
24037
  if (o.insertImageAsBase64URI) {
23997
- let file, i;
23998
- for (i = 0; i < fileList.length; i += 1) {
23999
- file = fileList[i];
24000
- if (file && file.type) {
24001
- const mime = file.type.match(/\/([a-z0-9]+)/i);
24002
- const extension = mime[1] ? mime[1].toLowerCase() : '';
24003
- if (o.imagesExtensions.includes(extension)) {
24004
- const reader = new FileReader();
24005
- promises.push(uploader.j.async.promise((resolve, reject) => {
24006
- reader.onerror = reject;
24007
- reader.onloadend = () => {
24008
- const resp = {
24009
- baseurl: '',
24010
- files: [reader.result],
24011
- isImages: [true]
24012
- };
24013
- const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24014
- ? handlerSuccess
24015
- : o.defaultHandlerSuccess;
24016
- handler.call(uploader, resp);
24017
- resolve(resp);
24018
- };
24019
- reader.readAsDataURL(file);
24020
- }));
24021
- fileList[i] = null;
24022
- }
24023
- }
24024
- }
24038
+ readImagesWithReader(fileList, o.imagesExtensions, promises, uploader, handlerSuccess, o.defaultHandlerSuccess);
24025
24039
  }
24026
24040
  fileList = fileList.filter(a => a);
24027
24041
  if (fileList.length) {
@@ -24032,7 +24046,7 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24032
24046
  for (let i = 0; i < fileList.length; i += 1) {
24033
24047
  file = fileList[i];
24034
24048
  if (file) {
24035
- const hasRealExtension = /\.[\d\w]+$/.test(file.name);
24049
+ const hasRealExtension = /\.\w+$/.test(file.name);
24036
24050
  const mime = file.type.match(/\/([a-z0-9]+)/i);
24037
24051
  const extension = mime && mime[1] ? mime[1].toLowerCase() : '';
24038
24052
  let newName = fileList[i].name ||
@@ -24081,6 +24095,37 @@ function sendFiles(uploader, files, handlerSuccess, handlerError, process) {
24081
24095
  }
24082
24096
  return Promise.all(promises);
24083
24097
  }
24098
+ function readImagesWithReader(fileList, imagesExtensions, promises, uploader, handlerSuccess, defaultHandlerSuccess) {
24099
+ let file, i;
24100
+ for (i = 0; i < fileList.length; i += 1) {
24101
+ file = fileList[i];
24102
+ if (file && file.type) {
24103
+ const mime = file.type.match(/\/([a-z0-9]+)/i);
24104
+ const extension = mime[1] ? mime[1].toLowerCase() : '';
24105
+ if (!imagesExtensions.includes(extension)) {
24106
+ continue;
24107
+ }
24108
+ const reader = new FileReader();
24109
+ promises.push(uploader.j.async.promise((resolve, reject) => {
24110
+ reader.onerror = reject;
24111
+ reader.onloadend = () => {
24112
+ const resp = {
24113
+ baseurl: '',
24114
+ files: [reader.result],
24115
+ isImages: [true]
24116
+ };
24117
+ const handler = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_0__.isFunction)(handlerSuccess)
24118
+ ? handlerSuccess
24119
+ : defaultHandlerSuccess;
24120
+ handler.call(uploader, resp);
24121
+ resolve(resp);
24122
+ };
24123
+ reader.readAsDataURL(file);
24124
+ }));
24125
+ fileList[i] = null;
24126
+ }
24127
+ }
24128
+ }
24084
24129
 
24085
24130
 
24086
24131
  /***/ }),
@@ -25646,7 +25691,7 @@ class backspace extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_3__/* .Plugin
25646
25691
  if (jodit.e.fire('backSpaceBeforeCases', backspace, fakeNode)) {
25647
25692
  return false;
25648
25693
  }
25649
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
25694
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_4__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
25650
25695
  if (_cases__WEBPACK_IMPORTED_MODULE_6__/* .cases */ .C.some((func) => {
25651
25696
  if ((0,jodit_core_helpers_checker_is_function__WEBPACK_IMPORTED_MODULE_8__/* .isFunction */ .T)(func) &&
25652
25697
  func(jodit, fakeNode, backspace, mode)) {
@@ -25906,19 +25951,12 @@ function checkNotCollapsed(jodit) {
25906
25951
  function checkRemoveChar(jodit, fakeNode, backspace, mode) {
25907
25952
  const step = backspace ? -1 : 1;
25908
25953
  const anotherSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, !backspace);
25909
- let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace), removeNeighbor = null;
25910
- let charRemoved = false, removed;
25911
- const getNextInlineSibling = (sibling) => {
25912
- let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
25913
- if (!nextSibling &&
25914
- sibling.parentNode &&
25915
- sibling.parentNode !== jodit.editor) {
25916
- nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, jodit.editor, true);
25917
- }
25918
- return nextSibling;
25919
- };
25954
+ let sibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(fakeNode, backspace);
25955
+ let removeNeighbor = null;
25956
+ let charRemoved = false;
25957
+ let removed;
25920
25958
  if (!sibling) {
25921
- sibling = getNextInlineSibling(fakeNode);
25959
+ sibling = getNextInlineSibling(fakeNode, backspace, jodit.editor);
25922
25960
  }
25923
25961
  while (sibling && (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(sibling) || jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling))) {
25924
25962
  while (jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isInlineBlock(sibling)) {
@@ -25928,57 +25966,17 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
25928
25966
  break;
25929
25967
  }
25930
25968
  if (sibling.nodeValue?.length) {
25931
- // For Unicode escapes
25932
- let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
25933
- const length = value.length;
25934
- let index = backspace ? length - 1 : 0;
25935
- if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25936
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25937
- index += step;
25938
- }
25939
- }
25940
- removed = value[index];
25941
- if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25942
- index += step;
25943
- while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25944
- index += step;
25945
- }
25946
- index += backspace ? 1 : -1;
25947
- }
25948
- if (backspace && index < 0) {
25949
- value = [];
25950
- }
25951
- else {
25952
- value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
25953
- }
25954
- if (!anotherSibling ||
25955
- !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
25956
- (!backspace ? / $/ : /^ /).test(anotherSibling.nodeValue ?? '') ||
25957
- !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
25958
- for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
25959
- if (value[i] === ' ') {
25960
- value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
25961
- }
25962
- else {
25963
- break;
25964
- }
25965
- }
25966
- }
25967
- sibling.nodeValue = value.join('');
25969
+ removed = tryRemoveChar(sibling, backspace, step, anotherSibling);
25968
25970
  }
25969
25971
  if (!sibling.nodeValue?.length) {
25970
25972
  removeNeighbor = sibling;
25971
25973
  }
25972
25974
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.isVoid)(removed) && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
25975
+ checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit);
25973
25976
  charRemoved = true;
25974
- (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);
25975
- if (mode === 'sentence' ||
25976
- (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
25977
- checkRemoveChar(jodit, fakeNode, backspace, mode);
25978
- }
25979
25977
  break;
25980
25978
  }
25981
- const nextSibling = getNextInlineSibling(sibling);
25979
+ const nextSibling = getNextInlineSibling(sibling, backspace, jodit.editor);
25982
25980
  if (removeNeighbor) {
25983
25981
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.safeRemove(removeNeighbor);
25984
25982
  removeNeighbor = null;
@@ -26000,6 +25998,13 @@ function checkRemoveChar(jodit, fakeNode, backspace, mode) {
26000
25998
  }
26001
25999
  return charRemoved;
26002
26000
  }
26001
+ function getNextInlineSibling(sibling, backspace, root) {
26002
+ let nextSibling = jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.sibling(sibling, backspace);
26003
+ if (!nextSibling && sibling.parentNode && sibling.parentNode !== root) {
26004
+ nextSibling = (0,jodit_plugins_backspace_helpers__WEBPACK_IMPORTED_MODULE_3__/* .findMostNestedNeighbor */ .s)(sibling, !backspace, root, true);
26005
+ }
26006
+ return nextSibling;
26007
+ }
26003
26008
  /**
26004
26009
  * Helper removes all empty inline parents
26005
26010
  */
@@ -26024,6 +26029,56 @@ function addBRInsideEmptyBlock(jodit, node) {
26024
26029
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.after(node, jodit.createInside.element('br'));
26025
26030
  }
26026
26031
  }
26032
+ function tryRemoveChar(sibling, backspace, step, anotherSibling) {
26033
+ // For Unicode escapes
26034
+ let value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.toArray)(sibling.nodeValue);
26035
+ const length = value.length;
26036
+ let index = backspace ? length - 1 : 0;
26037
+ if (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26038
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26039
+ index += step;
26040
+ }
26041
+ }
26042
+ const removed = value[index];
26043
+ if (value[index + step] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26044
+ index += step;
26045
+ while (value[index] === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.INVISIBLE_SPACE) {
26046
+ index += step;
26047
+ }
26048
+ index += backspace ? 1 : -1;
26049
+ }
26050
+ if (backspace && index < 0) {
26051
+ value = [];
26052
+ }
26053
+ else {
26054
+ value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
26055
+ }
26056
+ replaceSpaceOnNBSP(anotherSibling, backspace, value);
26057
+ sibling.nodeValue = value.join('');
26058
+ return removed;
26059
+ }
26060
+ function replaceSpaceOnNBSP(anotherSibling, backspace, value) {
26061
+ if (!anotherSibling ||
26062
+ !jodit_core_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(anotherSibling) ||
26063
+ (!backspace ? / $/ : /^ /).test(anotherSibling.nodeValue ?? '') ||
26064
+ !(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_2__.trimInv)(anotherSibling.nodeValue || '').length) {
26065
+ for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
26066
+ if (value[i] === ' ') {
26067
+ value[i] = jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE;
26068
+ }
26069
+ else {
26070
+ break;
26071
+ }
26072
+ }
26073
+ }
26074
+ }
26075
+ function checkRepeatRemoveCharAction(backspace, sibling, fakeNode, mode, removed, jodit) {
26076
+ (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);
26077
+ if (mode === 'sentence' ||
26078
+ (mode === 'word' && removed !== ' ' && removed !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.NBSP_SPACE)) {
26079
+ checkRemoveChar(jodit, fakeNode, backspace, mode);
26080
+ }
26081
+ }
26027
26082
 
26028
26083
 
26029
26084
  /***/ }),
@@ -26061,7 +26116,7 @@ function checkRemoveContentNotEditable(jodit, fakeNode, backspace) {
26061
26116
  !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isContentEditable(neighbor, jodit.editor)) {
26062
26117
  (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);
26063
26118
  jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.safeRemove(neighbor);
26064
- (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W)(jodit, fakeNode, backspace);
26119
+ (0,jodit_core_selection_helpers__WEBPACK_IMPORTED_MODULE_2__/* .moveNodeInsideStart */ .W8)(jodit, fakeNode, backspace);
26065
26120
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_1__.call)(backspace ? jodit.s.setCursorBefore : jodit.s.setCursorAfter, fakeNode);
26066
26121
  return true;
26067
26122
  }
@@ -28520,45 +28575,11 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
28520
28575
  const sel = this.j.s.sel;
28521
28576
  const range = this.bufferRange ||
28522
28577
  (sel && sel.rangeCount ? sel.getRangeAt(0) : null);
28523
- let fragment = null;
28524
- if (!this.draggable && range) {
28525
- fragment = this.isCopyMode
28526
- ? range.cloneContents()
28527
- : range.extractContents();
28528
- }
28529
- else if (this.draggable) {
28530
- if (this.isCopyMode) {
28531
- const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
28532
- ? ['a', 'href']
28533
- : ['img', 'src'];
28534
- fragment = this.j.createInside.element(tagName);
28535
- fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
28536
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
28537
- '');
28538
- if (tagName === 'a') {
28539
- fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
28540
- }
28541
- }
28542
- else {
28543
- fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
28544
- }
28545
- }
28546
- else if (this.getText(event)) {
28547
- fragment = this.j.createInside.fromHTML(this.getText(event));
28548
- }
28578
+ const fragment = this.__getWorkFragment(range, event);
28549
28579
  sel && sel.removeAllRanges();
28550
28580
  this.j.s.insertCursorAtPoint(event.clientX, event.clientY);
28551
28581
  if (fragment) {
28552
- this.j.s.insertNode(fragment, false, false);
28553
- if (range && fragment.firstChild && fragment.lastChild) {
28554
- range.setStartBefore(fragment.firstChild);
28555
- range.setEndAfter(fragment.lastChild);
28556
- this.j.s.selectRange(range);
28557
- this.j.e.fire('synchro');
28558
- }
28559
- if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
28560
- this.j.e.fire('afterInsertImage', fragment);
28561
- }
28582
+ this.__insertFragment.call(this, fragment, range);
28562
28583
  }
28563
28584
  event.preventDefault();
28564
28585
  event.stopPropagation();
@@ -28566,6 +28587,47 @@ class dragAndDrop extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_5__/* .Plug
28566
28587
  this.isFragmentFromEditor = false;
28567
28588
  this.removeDragListeners();
28568
28589
  }
28590
+ __getWorkFragment(range, event) {
28591
+ let fragment = null;
28592
+ if (!this.draggable && range) {
28593
+ fragment = this.isCopyMode
28594
+ ? range.cloneContents()
28595
+ : range.extractContents();
28596
+ }
28597
+ else if (this.draggable) {
28598
+ if (this.isCopyMode) {
28599
+ const [tagName, field] = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, '-is-file') === '1'
28600
+ ? ['a', 'href']
28601
+ : ['img', 'src'];
28602
+ fragment = this.j.createInside.element(tagName);
28603
+ fragment.setAttribute(field, (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') ||
28604
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') ||
28605
+ '');
28606
+ if (tagName === 'a') {
28607
+ fragment.textContent = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
28608
+ }
28609
+ }
28610
+ else {
28611
+ fragment = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_4__.dataBind)(this.draggable, 'target');
28612
+ }
28613
+ }
28614
+ else if (this.getText(event)) {
28615
+ fragment = this.j.createInside.fromHTML(this.getText(event));
28616
+ }
28617
+ return fragment;
28618
+ }
28619
+ __insertFragment(fragment, range) {
28620
+ this.j.s.insertNode(fragment, false, false);
28621
+ if (range && fragment.firstChild && fragment.lastChild) {
28622
+ range.setStartBefore(fragment.firstChild);
28623
+ range.setEndAfter(fragment.lastChild);
28624
+ this.j.s.selectRange(range);
28625
+ this.j.e.fire('synchro');
28626
+ }
28627
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_2__/* .Dom */ .J.isTag(fragment, 'img') && this.j.events) {
28628
+ this.j.e.fire('afterInsertImage', fragment);
28629
+ }
28630
+ }
28569
28631
  /** @override */
28570
28632
  beforeDestruct() {
28571
28633
  this.onDragEnd();
@@ -32687,6 +32749,9 @@ const cmd = (control) => control.args && (0,jodit_core_helpers_checker__WEBPACK_
32687
32749
  if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isJoditObject */ .y0)(editor)) {
32688
32750
  return;
32689
32751
  }
32752
+ if (!control.args) {
32753
+ return false;
32754
+ }
32690
32755
  const command = cmd(control);
32691
32756
  editor.execCommand(command, false, table);
32692
32757
  },
@@ -32702,6 +32767,9 @@ const cmd = (control) => control.args && (0,jodit_core_helpers_checker__WEBPACK_
32702
32767
  if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isJoditObject */ .y0)(editor)) {
32703
32768
  return;
32704
32769
  }
32770
+ if (!control.args) {
32771
+ return false;
32772
+ }
32705
32773
  const command = cmd(control);
32706
32774
  editor.execCommand(command, false, table);
32707
32775
  },
@@ -32720,6 +32788,9 @@ const cmd = (control) => control.args && (0,jodit_core_helpers_checker__WEBPACK_
32720
32788
  if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isJoditObject */ .y0)(editor)) {
32721
32789
  return;
32722
32790
  }
32791
+ if (!control.args) {
32792
+ return false;
32793
+ }
32723
32794
  const command = cmd(control);
32724
32795
  editor.execCommand(command, false, table);
32725
32796
  editor.e.fire('hidePopup');
@@ -33870,35 +33941,7 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
33870
33941
  if (link) {
33871
33942
  url_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'href') || '';
33872
33943
  if (modeClassName) {
33873
- switch (modeClassName) {
33874
- case 'input':
33875
- if (className_input) {
33876
- className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
33877
- }
33878
- break;
33879
- case 'select':
33880
- if (className_select) {
33881
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
33882
- const option = className_select.options.item(i);
33883
- if (option) {
33884
- option.selected = false;
33885
- }
33886
- }
33887
- const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
33888
- classNames.split(' ').forEach(className => {
33889
- if (className) {
33890
- for (let i = 0; i < className_select.options.length; i++) {
33891
- const option = className_select.options.item(i);
33892
- if (option?.value &&
33893
- option.value === className) {
33894
- option.selected = true;
33895
- }
33896
- }
33897
- }
33898
- });
33899
- }
33900
- break;
33901
- }
33944
+ readClassnames(modeClassName, className_input, link, className_select);
33902
33945
  }
33903
33946
  if (openInNewTabCheckbox && target_checkbox) {
33904
33947
  target_checkbox.checked = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
@@ -33960,42 +34003,9 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
33960
34003
  }
33961
34004
  links.forEach(a => {
33962
34005
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', url_input.value);
33963
- if (modeClassName && (className_input ?? className_select)) {
33964
- if (modeClassName === 'input') {
33965
- if (className_input.value === '' &&
33966
- a.hasAttribute('class')) {
33967
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
33968
- }
33969
- if (className_input.value !== '') {
33970
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
33971
- }
33972
- }
33973
- else if (modeClassName === 'select') {
33974
- if (a.hasAttribute('class')) {
33975
- (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
33976
- }
33977
- for (let i = 0; i < className_select.selectedOptions.length; i++) {
33978
- const className = className_select.selectedOptions.item(i)?.value;
33979
- if (className) {
33980
- a.classList.add(className);
33981
- }
33982
- }
33983
- }
33984
- }
34006
+ writeClasses(modeClassName, className_input, className_select, a);
33985
34007
  if (!isImageContent) {
33986
- let newContent = a.textContent;
33987
- if (content_input.value.trim().length) {
33988
- if (textWasChanged) {
33989
- newContent = content_input.value;
33990
- }
33991
- }
33992
- else {
33993
- newContent = url_input.value;
33994
- }
33995
- const content = a.textContent;
33996
- if (newContent !== content) {
33997
- a.textContent = newContent;
33998
- }
34008
+ writeImage(a, content_input, textWasChanged, url_input);
33999
34009
  }
34000
34010
  if (openInNewTabCheckbox && target_checkbox) {
34001
34011
  (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
@@ -34040,6 +34050,74 @@ class link extends jodit_core_plugin__WEBPACK_IMPORTED_MODULE_4__/* .Plugin */ .
34040
34050
  jodit_core_decorators__WEBPACK_IMPORTED_MODULE_0__.autobind
34041
34051
  ], link.prototype, "__generateForm", null);
34042
34052
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('link', link);
34053
+ function writeClasses(modeClassName, className_input, className_select, a) {
34054
+ if (modeClassName && (className_input ?? className_select)) {
34055
+ if (modeClassName === 'input') {
34056
+ if (className_input.value === '' && a.hasAttribute('class')) {
34057
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34058
+ }
34059
+ if (className_input.value !== '') {
34060
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', className_input.value);
34061
+ }
34062
+ }
34063
+ else if (modeClassName === 'select') {
34064
+ if (a.hasAttribute('class')) {
34065
+ (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'class', null);
34066
+ }
34067
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34068
+ const className = className_select.selectedOptions.item(i)?.value;
34069
+ if (className) {
34070
+ a.classList.add(className);
34071
+ }
34072
+ }
34073
+ }
34074
+ }
34075
+ }
34076
+ function readClassnames(modeClassName, className_input, link, className_select) {
34077
+ switch (modeClassName) {
34078
+ case 'input':
34079
+ if (className_input) {
34080
+ className_input.value = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34081
+ }
34082
+ break;
34083
+ case 'select':
34084
+ if (className_select) {
34085
+ for (let i = 0; i < className_select.selectedOptions.length; i++) {
34086
+ const option = className_select.options.item(i);
34087
+ if (option) {
34088
+ option.selected = false;
34089
+ }
34090
+ }
34091
+ const classNames = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'class') || '';
34092
+ classNames.split(' ').forEach(className => {
34093
+ if (className) {
34094
+ for (let i = 0; i < className_select.options.length; i++) {
34095
+ const option = className_select.options.item(i);
34096
+ if (option?.value && option.value === className) {
34097
+ option.selected = true;
34098
+ }
34099
+ }
34100
+ }
34101
+ });
34102
+ }
34103
+ break;
34104
+ }
34105
+ }
34106
+ function writeImage(a, content_input, textWasChanged, url_input) {
34107
+ let newContent = a.textContent;
34108
+ if (content_input.value.trim().length) {
34109
+ if (textWasChanged) {
34110
+ newContent = content_input.value;
34111
+ }
34112
+ }
34113
+ else {
34114
+ newContent = url_input.value;
34115
+ }
34116
+ const content = a.textContent;
34117
+ if (newContent !== content) {
34118
+ a.textContent = newContent;
34119
+ }
34120
+ }
34043
34121
 
34044
34122
 
34045
34123
  /***/ }),
@@ -36877,7 +36955,6 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__/* .Config */ .T.prototype.controls.fin
36877
36955
  /* harmony export */ _B: function() { return /* binding */ highlightTextRanges; },
36878
36956
  /* harmony export */ zy: function() { return /* binding */ getSelectionWrappers; }
36879
36957
  /* harmony export */ });
36880
- /* unused harmony export isSelectionWrapper */
36881
36958
  /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(55186);
36882
36959
  /* harmony import */ var jodit_core_helpers_utils_selector__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58720);
36883
36960
  /*!
@@ -36899,60 +36976,14 @@ function highlightTextRanges(jodit, rng, restRanges, ci, root) {
36899
36976
  rng.endContainer.nodeValue == null) {
36900
36977
  return;
36901
36978
  }
36902
- if (jodit.o.search.useCustomHighlightAPI &&
36903
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
36904
- typeof window.Highlight !== 'undefined') {
36905
- const ranges = [rng, ...restRanges].map(rng => {
36906
- const range = jodit.selection.createRange();
36907
- range.setStart(rng.startContainer, rng.startOffset);
36908
- range.setEnd(rng.endContainer, rng.endOffset);
36909
- return range;
36910
- });
36911
- // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
36912
- const searchHighlight = new Highlight(...ranges);
36913
- // @ts-ignore
36914
- CSS.highlights.clear();
36915
- // @ts-ignore
36916
- CSS.highlights.set('jodit-search-result', searchHighlight);
36917
- restRanges.length = 0;
36979
+ if (checkNativeSelectionMethod(jodit, rng, restRanges)) {
36918
36980
  return;
36919
36981
  }
36920
36982
  const span = ci.element('span', {
36921
36983
  [TMP_ATTR]: true
36922
36984
  });
36923
36985
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.markTemporary(span);
36924
- const startText = rng.startContainer.nodeValue;
36925
- let diff = 0;
36926
- if (rng.startOffset !== 0) {
36927
- const text = ci.text(startText.substring(0, rng.startOffset));
36928
- rng.startContainer.nodeValue = startText.substring(rng.startOffset);
36929
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
36930
- if (rng.startContainer === rng.endContainer) {
36931
- diff = rng.startOffset;
36932
- rng.endOffset -= diff;
36933
- }
36934
- rng.startOffset = 0;
36935
- }
36936
- const endText = rng.endContainer.nodeValue;
36937
- if (rng.endOffset !== endText.length) {
36938
- const text = ci.text(endText.substring(rng.endOffset));
36939
- rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
36940
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
36941
- for (const range of restRanges) {
36942
- if (range.startContainer === rng.endContainer) {
36943
- range.startContainer = text;
36944
- range.startOffset = range.startOffset - rng.endOffset - diff;
36945
- if (range.endContainer === rng.endContainer) {
36946
- range.endContainer = text;
36947
- range.endOffset = range.endOffset - rng.endOffset - diff;
36948
- }
36949
- }
36950
- else {
36951
- break;
36952
- }
36953
- }
36954
- rng.endOffset = rng.endContainer.nodeValue.length;
36955
- }
36986
+ normalizeRanges(rng, restRanges, ci);
36956
36987
  let next = rng.startContainer;
36957
36988
  do {
36958
36989
  if (!next) {
@@ -36998,6 +37029,61 @@ function clearSelectionWrappersFromHTML(root) {
36998
37029
  function isSelectionWrapper(node) {
36999
37030
  return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.isElement(node) && node.hasAttribute(TMP_ATTR);
37000
37031
  }
37032
+ function checkNativeSelectionMethod(jodit, rng, restRanges) {
37033
+ if (jodit.o.search.useCustomHighlightAPI &&
37034
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37035
+ typeof window.Highlight !== 'undefined') {
37036
+ const ranges = [rng, ...restRanges].map(rng => {
37037
+ const range = jodit.selection.createRange();
37038
+ range.setStart(rng.startContainer, rng.startOffset);
37039
+ range.setEnd(rng.endContainer, rng.endOffset);
37040
+ return range;
37041
+ });
37042
+ // @ts-ignore Because Highlight is not defined in the types TS 5.3.3
37043
+ const searchHighlight = new Highlight(...ranges);
37044
+ // @ts-ignore
37045
+ CSS.highlights.clear();
37046
+ // @ts-ignore
37047
+ CSS.highlights.set('jodit-search-result', searchHighlight);
37048
+ restRanges.length = 0;
37049
+ return true;
37050
+ }
37051
+ return false;
37052
+ }
37053
+ function normalizeRanges(rng, restRanges, ci) {
37054
+ const startText = rng.startContainer.nodeValue;
37055
+ let diff = 0;
37056
+ if (rng.startOffset !== 0) {
37057
+ const text = ci.text(startText.substring(0, rng.startOffset));
37058
+ rng.startContainer.nodeValue = startText.substring(rng.startOffset);
37059
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.before(rng.startContainer, text);
37060
+ if (rng.startContainer === rng.endContainer) {
37061
+ diff = rng.startOffset;
37062
+ rng.endOffset -= diff;
37063
+ }
37064
+ rng.startOffset = 0;
37065
+ }
37066
+ const endText = rng.endContainer.nodeValue;
37067
+ if (rng.endOffset !== endText.length) {
37068
+ const text = ci.text(endText.substring(rng.endOffset));
37069
+ rng.endContainer.nodeValue = endText.substring(0, rng.endOffset);
37070
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__/* .Dom */ .J.after(rng.endContainer, text);
37071
+ for (const range of restRanges) {
37072
+ if (range.startContainer === rng.endContainer) {
37073
+ range.startContainer = text;
37074
+ range.startOffset = range.startOffset - rng.endOffset - diff;
37075
+ if (range.endContainer === rng.endContainer) {
37076
+ range.endContainer = text;
37077
+ range.endOffset = range.endOffset - rng.endOffset - diff;
37078
+ }
37079
+ }
37080
+ else {
37081
+ break;
37082
+ }
37083
+ }
37084
+ rng.endOffset = rng.endContainer.nodeValue.length;
37085
+ }
37086
+ }
37001
37087
 
37002
37088
 
37003
37089
  /***/ }),
@@ -40379,38 +40465,10 @@ function tableKeyboardNavigation(editor) {
40379
40465
  .off('.tableKeyboardNavigation')
40380
40466
  .on('keydown.tableKeyboardNavigation', (event) => {
40381
40467
  const { key } = event;
40382
- if (!WORK_KEYS.has(key)) {
40383
- return;
40384
- }
40385
- const current = editor.s.current();
40386
- if (!current) {
40387
- return;
40388
- }
40389
- 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);
40468
+ const cell = findCell(editor, key);
40390
40469
  if (!cell) {
40391
40470
  return;
40392
40471
  }
40393
- const { range } = editor.s;
40394
- if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
40395
- const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
40396
- 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
40397
- ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
40398
- : Boolean(elm), cell);
40399
- if ((!isNextDirection &&
40400
- (hasNext ||
40401
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
40402
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40403
- range.startOffset !== 0))) ||
40404
- (isNextDirection &&
40405
- (hasNext ||
40406
- (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
40407
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40408
- current.nodeValue &&
40409
- range.startOffset !==
40410
- current.nodeValue.length)))) {
40411
- return;
40412
- }
40413
- }
40414
40472
  const tableModule = editor.getInstance(jodit_modules_table_table__WEBPACK_IMPORTED_MODULE_4__/* .Table */ .X, editor.o);
40415
40473
  const table = jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.closest(cell, 'table', editor.editor);
40416
40474
  let next = null;
@@ -40468,6 +40526,40 @@ function tableKeyboardNavigation(editor) {
40468
40526
  });
40469
40527
  }
40470
40528
  jodit_core_global__WEBPACK_IMPORTED_MODULE_2__/* .pluginSystem */ .fg.add('tableKeyboardNavigation', tableKeyboardNavigation);
40529
+ function findCell(editor, key) {
40530
+ if (!WORK_KEYS.has(key)) {
40531
+ return;
40532
+ }
40533
+ const current = editor.s.current();
40534
+ if (!current) {
40535
+ return;
40536
+ }
40537
+ 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);
40538
+ if (!cell) {
40539
+ return;
40540
+ }
40541
+ const { range } = editor.s;
40542
+ if (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_TAB && current !== cell) {
40543
+ const isNextDirection = key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_RIGHT || key === jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN;
40544
+ 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
40545
+ ? jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isTag(elm, 'br')
40546
+ : Boolean(elm), cell);
40547
+ if ((!isNextDirection &&
40548
+ (hasNext ||
40549
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_UP &&
40550
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40551
+ range.startOffset !== 0))) ||
40552
+ (isNextDirection &&
40553
+ (hasNext ||
40554
+ (key !== jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.KEY_DOWN &&
40555
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom */ .J.isText(current) &&
40556
+ current.nodeValue &&
40557
+ range.startOffset !== current.nodeValue.length)))) {
40558
+ return;
40559
+ }
40560
+ }
40561
+ return cell;
40562
+ }
40471
40563
 
40472
40564
 
40473
40565
  /***/ }),
@@ -42383,16 +42475,16 @@ var __webpack_exports__ = {};
42383
42475
  __webpack_require__.r(__webpack_exports__);
42384
42476
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
42385
42477
  /* harmony export */ CommitMode: function() { return /* binding */ CommitMode; },
42386
- /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_6__.x; }
42478
+ /* harmony export */ Jodit: function() { return /* reexport safe */ _jodit__WEBPACK_IMPORTED_MODULE_0__.x; }
42387
42479
  /* harmony export */ });
42388
- /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9823);
42389
- /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88222);
42480
+ /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46173);
42481
+ /* harmony import */ var jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9823);
42390
42482
  /* harmony import */ var _core_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(17352);
42391
42483
  /* harmony import */ var _core_decorators__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(22664);
42392
42484
  /* harmony import */ var _modules___WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(37435);
42393
42485
  /* harmony import */ var _styles_icons___WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(79721);
42394
- /* harmony import */ var _jodit__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46173);
42395
- /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(74470);
42486
+ /* harmony import */ var _languages__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74470);
42487
+ /* harmony import */ var jodit_plugins_index__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(88222);
42396
42488
  /*!
42397
42489
  * Jodit Editor (https://xdsoft.net/jodit/)
42398
42490
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -42403,6 +42495,7 @@ __webpack_require__.r(__webpack_exports__);
42403
42495
  * @packageDocumentation
42404
42496
  * @module jodit
42405
42497
  */
42498
+ // eslint-disable-next-line simple-import-sort/imports
42406
42499
 
42407
42500
 
42408
42501
 
@@ -42415,7 +42508,7 @@ __webpack_require__.r(__webpack_exports__);
42415
42508
 
42416
42509
  // copy constants in Jodit
42417
42510
  Object.keys(_core_constants__WEBPACK_IMPORTED_MODULE_2__).forEach((key) => {
42418
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
42511
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _core_constants__WEBPACK_IMPORTED_MODULE_2__[key];
42419
42512
  });
42420
42513
  const esFilter = (key) => key !== '__esModule';
42421
42514
  // Icons
@@ -42430,32 +42523,32 @@ Object.keys(_modules___WEBPACK_IMPORTED_MODULE_4__)
42430
42523
  .forEach((key) => {
42431
42524
  // @ts-ignore
42432
42525
  const module = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
42433
- const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isFunction */ .Tn)(module.prototype?.className)
42526
+ const name = (0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isFunction */ .Tn)(module.prototype?.className)
42434
42527
  ? module.prototype.className()
42435
42528
  : key;
42436
- if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_0__/* .isString */ .Kg)(name)) {
42529
+ if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_1__/* .isString */ .Kg)(name)) {
42437
42530
  console.warn('Module name must be a string', key);
42438
42531
  return;
42439
42532
  }
42440
42533
  // @ts-ignore
42441
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.modules[name] = module;
42534
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.modules[name] = module;
42442
42535
  });
42443
42536
  // Decorators
42444
42537
  Object.keys(_core_decorators__WEBPACK_IMPORTED_MODULE_3__)
42445
42538
  .filter(esFilter)
42446
42539
  .forEach((key) => {
42447
42540
  // @ts-ignore
42448
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
42541
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.decorators[key] = _core_decorators__WEBPACK_IMPORTED_MODULE_3__[key];
42449
42542
  });
42450
42543
  ['Confirm', 'Alert', 'Prompt'].forEach((key) => {
42451
42544
  // @ts-ignore
42452
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
42545
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x[key] = _modules___WEBPACK_IMPORTED_MODULE_4__[key];
42453
42546
  });
42454
42547
  // Languages
42455
- Object.keys(_languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A)
42548
+ Object.keys(_languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A)
42456
42549
  .filter(esFilter)
42457
42550
  .forEach((key) => {
42458
- _jodit__WEBPACK_IMPORTED_MODULE_6__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .A[key];
42551
+ _jodit__WEBPACK_IMPORTED_MODULE_0__/* .Jodit */ .x.lang[key] = _languages__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .A[key];
42459
42552
  });
42460
42553
 
42461
42554
  class CommitMode {