jodit 4.15.7 → 4.15.9

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 (60) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +5 -5
  4. package/es2015/jodit.js +65 -31
  5. package/es2015/jodit.min.js +6 -6
  6. package/es2015/plugins/debug/debug.css +1 -1
  7. package/es2015/plugins/debug/debug.js +1 -1
  8. package/es2015/plugins/debug/debug.min.js +1 -1
  9. package/es2015/plugins/speech-recognize/speech-recognize.css +1 -1
  10. package/es2015/plugins/speech-recognize/speech-recognize.js +1 -1
  11. package/es2015/plugins/speech-recognize/speech-recognize.min.js +1 -1
  12. package/es2018/jodit.fat.min.js +5 -5
  13. package/es2018/jodit.min.js +6 -6
  14. package/es2018/plugins/debug/debug.min.js +1 -1
  15. package/es2018/plugins/speech-recognize/speech-recognize.min.js +1 -1
  16. package/es2021/jodit.css +1 -1
  17. package/es2021/jodit.fat.min.js +6 -6
  18. package/es2021/jodit.js +64 -30
  19. package/es2021/jodit.min.js +7 -7
  20. package/es2021/plugins/debug/debug.css +1 -1
  21. package/es2021/plugins/debug/debug.js +1 -1
  22. package/es2021/plugins/debug/debug.min.js +1 -1
  23. package/es2021/plugins/speech-recognize/speech-recognize.css +1 -1
  24. package/es2021/plugins/speech-recognize/speech-recognize.js +1 -1
  25. package/es2021/plugins/speech-recognize/speech-recognize.min.js +1 -1
  26. package/es2021.en/jodit.css +1 -1
  27. package/es2021.en/jodit.fat.min.js +6 -6
  28. package/es2021.en/jodit.js +64 -30
  29. package/es2021.en/jodit.min.js +7 -7
  30. package/es2021.en/plugins/debug/debug.css +1 -1
  31. package/es2021.en/plugins/debug/debug.js +1 -1
  32. package/es2021.en/plugins/debug/debug.min.js +1 -1
  33. package/es2021.en/plugins/speech-recognize/speech-recognize.css +1 -1
  34. package/es2021.en/plugins/speech-recognize/speech-recognize.js +1 -1
  35. package/es2021.en/plugins/speech-recognize/speech-recognize.min.js +1 -1
  36. package/es5/jodit.css +2 -2
  37. package/es5/jodit.fat.min.js +2 -2
  38. package/es5/jodit.js +65 -31
  39. package/es5/jodit.min.css +2 -2
  40. package/es5/jodit.min.js +2 -2
  41. package/es5/plugins/debug/debug.css +1 -1
  42. package/es5/plugins/debug/debug.js +1 -1
  43. package/es5/plugins/debug/debug.min.js +1 -1
  44. package/es5/plugins/speech-recognize/speech-recognize.css +1 -1
  45. package/es5/plugins/speech-recognize/speech-recognize.js +1 -1
  46. package/es5/plugins/speech-recognize/speech-recognize.min.js +1 -1
  47. package/es5/polyfills.fat.min.js +1 -1
  48. package/es5/polyfills.js +1 -1
  49. package/es5/polyfills.min.js +1 -1
  50. package/esm/config.d.ts +2 -1
  51. package/esm/core/constants.js +1 -1
  52. package/esm/jodit.d.ts +6 -0
  53. package/esm/jodit.js +9 -2
  54. package/esm/plugins/clean-html/config.d.ts +2 -1
  55. package/esm/plugins/clean-html/helpers/visitor/filters/try-remove-node.js +10 -0
  56. package/esm/plugins/mobile/mobile.js +25 -4
  57. package/package.json +1 -1
  58. package/types/config.d.ts +2 -1
  59. package/types/jodit.d.ts +6 -0
  60. package/types/plugins/clean-html/config.d.ts +2 -1
package/es5/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.15.7
4
+ * Version: v4.15.9
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -2107,7 +2107,7 @@ __webpack_require__.r(__webpack_exports__);
2107
2107
  * @packageDocumentation
2108
2108
  * @module constants
2109
2109
  */
2110
- var APP_VERSION = "4.15.7";
2110
+ var APP_VERSION = "4.15.9";
2111
2111
  // prettier-ignore
2112
2112
  var ES = "es5";
2113
2113
  var IS_ES_MODERN = false;
@@ -21291,6 +21291,10 @@ var Jodit = /*#__PURE__*/ function(ViewWithToolbar) {
21291
21291
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "isJodit", true), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "commands", new Map()), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "__selectionLocked", null), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "__wasReadOnly", false), /**
21292
21292
  * Editor has focus in this time
21293
21293
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "editorIsActive", false), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "selection", void 0), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "__mode", jodit_core_constants__WEBPACK_IMPORTED_MODULE_12__.MODE_WYSIWYG), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "__callChangeCount", 0), /**
21294
+ * In inline mode the source element is the editor container, so its
21295
+ * `innerHTML` is the editor's own markup rather than the value. Keep the
21296
+ * value last synchronised to it here instead.
21297
+ */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "__inlineElementValue", void 0), /**
21294
21298
  * Don't raise a change event
21295
21299
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "__isSilentChange", false), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_3__._)(_this, "currentPlace", {
21296
21300
  options: _this.__options,
@@ -21769,6 +21773,9 @@ var Jodit = /*#__PURE__*/ function(ViewWithToolbar) {
21769
21773
  * Return source element value
21770
21774
  */ key: "getElementValue",
21771
21775
  value: function getElementValue() {
21776
+ if (this.element === this.container && this.__inlineElementValue !== undefined) {
21777
+ return this.__inlineElementValue;
21778
+ }
21772
21779
  return this.element.value !== undefined ? this.element.value : this.element.innerHTML;
21773
21780
  }
21774
21781
  },
@@ -21779,7 +21786,11 @@ var Jodit = /*#__PURE__*/ function(ViewWithToolbar) {
21779
21786
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_15__.isString)(value)) {
21780
21787
  throw (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_15__.error)('value must be string');
21781
21788
  }
21782
- if (this.element !== this.container && value !== this.getElementValue()) {
21789
+ if (this.element === this.container) {
21790
+ this.__inlineElementValue = value;
21791
+ return;
21792
+ }
21793
+ if (value !== this.getElementValue()) {
21783
21794
  var data = {
21784
21795
  value: value
21785
21796
  };
@@ -35243,7 +35254,14 @@ function filterStyleProperties(style, allowed) {
35243
35254
  // a pending-format marker the user is about to type into (#1291). `current`
35244
35255
  // is captured before a click moves the caret, so also check the live caret.
35245
35256
  var liveCaret = jodit.s.isCollapsed() ? jodit.s.range.startContainer : null;
35246
- return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && node.nodeName.match(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE) != null && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isTemporary(node) && (0,jodit_core_helpers_string_trim__WEBPACK_IMPORTED_MODULE_2__.trimInv)(node.innerHTML).length === 0 && (current == null || !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, current)) && (liveCaret == null || !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, liveCaret));
35257
+ return jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && node.nodeName.match(jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE) != null && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isTemporary(node) && !isFragmentTarget(node) && (0,jodit_core_helpers_string_trim__WEBPACK_IMPORTED_MODULE_2__.trimInv)(node.innerHTML).length === 0 && (current == null || !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, current)) && (liveCaret == null || !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, liveCaret));
35258
+ }
35259
+ /**
35260
+ * An element with an `id`, or an `<a>` with a `name`, is where an in-page link
35261
+ * (`#fragment`) lands. It is usually empty (`<a name="top"></a>`), and removing
35262
+ * it silently breaks every link that points at it.
35263
+ */ function isFragmentTarget(element) {
35264
+ return element.hasAttribute('id') || element.nodeName === 'A' && element.hasAttribute('name');
35247
35265
  }
35248
35266
 
35249
35267
 
@@ -44297,10 +44315,12 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
44297
44315
  "use strict";
44298
44316
  /* unused harmony export mobile */
44299
44317
  /* harmony import */ var _swc_helpers_to_consumable_array__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(42395);
44300
- /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28077);
44301
- /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(65946);
44302
- /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2496);
44303
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(3244);
44318
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23211);
44319
+ /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28077);
44320
+ /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(65946);
44321
+ /* harmony import */ var jodit_core_helpers_checker_is_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(85932);
44322
+ /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2496);
44323
+ /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(3244);
44304
44324
  /*!
44305
44325
  * Jodit Editor (https://xdsoft.net/jodit/)
44306
44326
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -44314,6 +44334,8 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
44314
44334
 
44315
44335
 
44316
44336
 
44337
+
44338
+
44317
44339
  var isButtonSeparator = function isButtonSeparator(item) {
44318
44340
  return item === '|' || item === '---' || item === '\n';
44319
44341
  };
@@ -44329,7 +44351,7 @@ var isButtonSeparator = function isButtonSeparator(item) {
44329
44351
  * the standard grouped mobile layout — groups, separators and `dots` — is
44330
44352
  * preserved. See #1389.
44331
44353
  */ function fitToButtons(list, editor) {
44332
- var allowed = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_3__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons), editor);
44354
+ var allowed = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_5__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttons), editor);
44333
44355
  var groups = editor.getRegisteredButtonGroups();
44334
44356
  var changed = false;
44335
44357
  var hadDots = false;
@@ -44338,7 +44360,7 @@ var isButtonSeparator = function isButtonSeparator(item) {
44338
44360
  try {
44339
44361
  for(var _iterator = list[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
44340
44362
  var item = _step.value;
44341
- if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_3__.isButtonGroup)(item)) {
44363
+ if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_5__.isButtonGroup)(item)) {
44342
44364
  var _flat;
44343
44365
  var _groups_item_group;
44344
44366
  var members = (0,_swc_helpers_to_consumable_array__WEBPACK_IMPORTED_MODULE_0__._)(item.buttons).concat((0,_swc_helpers_to_consumable_array__WEBPACK_IMPORTED_MODULE_0__._)((_groups_item_group = groups[item.group]) !== null && _groups_item_group !== void 0 ? _groups_item_group : []));
@@ -44407,8 +44429,8 @@ var isButtonSeparator = function isButtonSeparator(item) {
44407
44429
  // Keep the "show all" overflow button only if some requested button is still
44408
44430
  // hidden at this breakpoint.
44409
44431
  if (hadDots) {
44410
- var shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_3__.flatButtonsSet)(cleaned, editor);
44411
- if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(allowed).some(function(button) {
44432
+ var shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_5__.flatButtonsSet)(cleaned, editor);
44433
+ if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.toArray)(allowed).some(function(button) {
44412
44434
  return !shown.has(button);
44413
44435
  })) {
44414
44436
  cleaned.push('dots');
@@ -44416,10 +44438,25 @@ var isButtonSeparator = function isButtonSeparator(item) {
44416
44438
  }
44417
44439
  return cleaned;
44418
44440
  }
44441
+ /**
44442
+ * The width that decides which breakpoint set the toolbar uses. A toolbar
44443
+ * rendered into an external container (`toolbar` set to an element or a
44444
+ * selector) lays out in that container, so its width is what matters there.
44445
+ */ function adaptiveWidth(editor) {
44446
+ var _editor_container_parentElement;
44447
+ var toolbar = editor.o.toolbar;
44448
+ if ((0,jodit_core_helpers_checker_is_string__WEBPACK_IMPORTED_MODULE_4__.isString)(toolbar) || jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isHTMLElement(toolbar)) {
44449
+ var width = editor.toolbarContainer.offsetWidth;
44450
+ if (width) {
44451
+ return width;
44452
+ }
44453
+ }
44454
+ return ((_editor_container_parentElement = editor.container.parentElement) !== null && _editor_container_parentElement !== void 0 ? _editor_container_parentElement : editor.container).offsetWidth;
44455
+ }
44419
44456
  /**
44420
44457
  * Rebuild toolbar in depends on editor's width
44421
44458
  */ function mobile(editor) {
44422
- var timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
44459
+ var timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttons);
44423
44460
  if (editor.o.mobileTapTimeout) {
44424
44461
  // Emulate double tap
44425
44462
  editor.e.on('touchend', function(e) {
@@ -44436,8 +44473,8 @@ var isButtonSeparator = function isButtonSeparator(item) {
44436
44473
  }
44437
44474
  editor.e.on('getDiffButtons.mobile', function(toolbar) {
44438
44475
  if (toolbar === editor.toolbar) {
44439
- var buttons = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_3__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons), editor), flatStore = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_3__.flatButtonsSet)(store, editor);
44440
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(buttons).reduce(function(acc, item) {
44476
+ var buttons = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_5__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttons), editor), flatStore = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_5__.flatButtonsSet)(store, editor);
44477
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.toArray)(buttons).reduce(function(acc, item) {
44441
44478
  if (!flatStore.has(item)) {
44442
44479
  acc.push(item);
44443
44480
  }
@@ -44447,22 +44484,24 @@ var isButtonSeparator = function isButtonSeparator(item) {
44447
44484
  });
44448
44485
  if (editor.o.toolbarAdaptive) {
44449
44486
  editor.e.on('resize afterInit recalcAdaptive changePlace afterAddPlace', function() {
44450
- var _editor_container_parentElement;
44451
44487
  if (!editor.o.toolbar) {
44452
44488
  return;
44453
44489
  }
44454
- var width = ((_editor_container_parentElement = editor.container.parentElement) !== null && _editor_container_parentElement !== void 0 ? _editor_container_parentElement : editor.container).offsetWidth;
44455
44490
  var newStore = function() {
44456
- if (editor.isFullSize || width >= editor.o.sizeLG) {
44457
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
44491
+ if (editor.isFullSize) {
44492
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttons);
44493
+ }
44494
+ var width = adaptiveWidth(editor);
44495
+ if (width >= editor.o.sizeLG) {
44496
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttons);
44458
44497
  }
44459
44498
  if (width >= editor.o.sizeMD) {
44460
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsMD), editor);
44499
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttonsMD), editor);
44461
44500
  }
44462
44501
  if (width >= editor.o.sizeSM) {
44463
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsSM), editor);
44502
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttonsSM), editor);
44464
44503
  }
44465
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsXS), editor);
44504
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_3__.splitArray)(editor.o.buttonsXS), editor);
44466
44505
  }();
44467
44506
  if (newStore.toString() !== store.toString()) {
44468
44507
  var _editor_toolbar;
@@ -44475,7 +44514,7 @@ var isButtonSeparator = function isButtonSeparator(item) {
44475
44514
  });
44476
44515
  }
44477
44516
  }
44478
- jodit_core_global__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('mobile', mobile);
44517
+ jodit_core_global__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('mobile', mobile);
44479
44518
 
44480
44519
 
44481
44520
  /***/ }),
@@ -55854,25 +55893,20 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
55854
55893
  /******/ /* webpack/runtime/chunk loaded */
55855
55894
  /******/ !function() {
55856
55895
  /******/ var deferred = [];
55857
- /******/ __webpack_require__.O = function(result, chunkIds, fn, priority) {
55896
+ /******/ __webpack_require__.O = function(result, chunkIds, fn) {
55858
55897
  /******/ if(chunkIds) {
55859
- /******/ priority = priority || 0;
55860
- /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
55861
- /******/ deferred[i] = [chunkIds, fn, priority];
55898
+ /******/ deferred.push([chunkIds, fn]);
55862
55899
  /******/ return;
55863
55900
  /******/ }
55864
- /******/ var notFulfilled = Infinity;
55865
55901
  /******/ for (var i = 0; i < deferred.length; i++) {
55866
55902
  /******/ var chunkIds = deferred[i][0];
55867
55903
  /******/ var fn = deferred[i][1];
55868
- /******/ var priority = deferred[i][2];
55869
55904
  /******/ var fulfilled = true;
55870
55905
  /******/ for (var j = 0; j < chunkIds.length; j++) {
55871
- /******/ if (((priority & 1) === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {
55906
+ /******/ if (__webpack_require__.O.j(chunkIds[j])) {
55872
55907
  /******/ chunkIds.splice(j--, 1);
55873
55908
  /******/ } else {
55874
55909
  /******/ fulfilled = false;
55875
- /******/ if(priority < notFulfilled) notFulfilled = priority;
55876
55910
  /******/ }
55877
55911
  /******/ }
55878
55912
  /******/ if(fulfilled) {
package/es5/jodit.min.css CHANGED
@@ -1,14 +1,14 @@
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.15.7
4
+ * Version: v4.15.9
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
8
8
  /*!
9
9
  * jodit - Jodit is an awesome and useful wysiwyg editor with filebrowser
10
10
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/jodit/)
11
- * Version: v4.15.7
11
+ * Version: v4.15.9
12
12
  * Url: https://xdsoft.net/jodit/
13
13
  * License(s): MIT
14
14
  */