jodit 4.13.23 → 4.13.25

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 (56) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +2 -2
  4. package/es2015/jodit.js +51 -10
  5. package/es2015/jodit.min.js +2 -2
  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 +2 -2
  13. package/es2018/jodit.min.js +2 -2
  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 +3 -3
  18. package/es2021/jodit.js +51 -9
  19. package/es2021/jodit.min.js +3 -3
  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 +3 -3
  28. package/es2021.en/jodit.js +51 -9
  29. package/es2021.en/jodit.min.js +3 -3
  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 +53 -10
  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/core/constants.js +1 -1
  51. package/esm/core/decorators/cache/cache.js +21 -3
  52. package/esm/core/selection/style/api/wrap.d.ts +2 -1
  53. package/esm/core/selection/style/api/wrap.js +12 -2
  54. package/esm/core/selection/style/transactions.js +18 -4
  55. package/package.json +1 -1
  56. package/types/core/selection/style/api/wrap.d.ts +2 -1
package/es2015/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit - Jodit is an awesome and useful wysiwyg editor with filebrowser
3
3
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/jodit/)
4
- * Version: v4.13.23
4
+ * Version: v4.13.25
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1849,7 +1849,7 @@ __webpack_require__.r(__webpack_exports__);
1849
1849
  * ```
1850
1850
  * @packageDocumentation
1851
1851
  * @module constants
1852
- */ const APP_VERSION = "4.13.23";
1852
+ */ const APP_VERSION = "4.13.25";
1853
1853
  // prettier-ignore
1854
1854
  const ES = "es2015";
1855
1855
  const IS_ES_MODERN = true;
@@ -2448,21 +2448,42 @@ class Create {
2448
2448
  return value;
2449
2449
  };
2450
2450
  }
2451
+ function getOwnerDocument(component) {
2452
+ const od = component.od;
2453
+ return od !== null && od !== void 0 ? od : document;
2454
+ }
2451
2455
  function cacheHTML(target, _, descriptor) {
2452
2456
  const fn = descriptor.value;
2453
2457
  if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_2__.isFunction)(fn)) {
2454
2458
  throw (0,jodit_core_helpers_utils_error_error__WEBPACK_IMPORTED_MODULE_3__.error)('Handler must be a Function');
2455
2459
  }
2456
2460
  let useCache = true;
2457
- const cached = new WeakMap();
2461
+ /**
2462
+ * The cache is keyed by the owner document first and only then by the
2463
+ * component class. A page can create editors inside different documents
2464
+ * (iframes) and destroy those documents later: a template cached from a
2465
+ * dead document would otherwise be cloned for every subsequent editor,
2466
+ * whose buttons then never react to clicks.
2467
+ */ const cached = new WeakMap();
2458
2468
  descriptor.value = function(...attrs) {
2459
- if (useCache && cached.has(this.constructor)) {
2460
- var _cached_get;
2461
- return (_cached_get = cached.get(this.constructor)) === null || _cached_get === void 0 ? void 0 : _cached_get.cloneNode(true);
2469
+ const doc = getOwnerDocument(this);
2470
+ const docCache = cached.get(doc);
2471
+ if (useCache && (docCache === null || docCache === void 0 ? void 0 : docCache.has(this.constructor))) {
2472
+ var _docCache_get;
2473
+ return (_docCache_get = docCache.get(this.constructor)) === null || _docCache_get === void 0 ? void 0 : _docCache_get.cloneNode(true);
2462
2474
  }
2463
2475
  const value = fn.apply(this, attrs);
2464
2476
  if (useCache && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(value)) {
2465
- cached.set(this.constructor, value);
2477
+ if (docCache) {
2478
+ docCache.set(this.constructor, value);
2479
+ } else {
2480
+ cached.set(doc, new WeakMap([
2481
+ [
2482
+ this.constructor,
2483
+ value
2484
+ ]
2485
+ ]));
2486
+ }
2466
2487
  }
2467
2488
  return useCache ? value.cloneNode(true) : value;
2468
2489
  };
@@ -12060,6 +12081,7 @@ if (jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__.globalDocument) {
12060
12081
  "use strict";
12061
12082
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12062
12083
  /* harmony export */ FiniteStateMachine: function() { return /* reexport safe */ _finite_state_machine__WEBPACK_IMPORTED_MODULE_1__.FiniteStateMachine; },
12084
+ /* harmony export */ WRAP_NODES: function() { return /* reexport safe */ _wrap__WEBPACK_IMPORTED_MODULE_13__.WRAP_NODES; },
12063
12085
  /* harmony export */ extractSelectedPart: function() { return /* reexport safe */ _extract__WEBPACK_IMPORTED_MODULE_0__.extractSelectedPart; },
12064
12086
  /* harmony export */ getSuitChild: function() { return /* reexport safe */ _get_suit_child__WEBPACK_IMPORTED_MODULE_2__.getSuitChild; },
12065
12087
  /* harmony export */ getSuitParent: function() { return /* reexport safe */ _get_suit_parent__WEBPACK_IMPORTED_MODULE_3__.getSuitParent; },
@@ -12726,6 +12748,7 @@ function toggleAttribute(jodit, value, elm, key, dry, mode) {
12726
12748
 
12727
12749
  "use strict";
12728
12750
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
12751
+ /* harmony export */ WRAP_NODES: function() { return /* binding */ WRAP_NODES; },
12729
12752
  /* harmony export */ wrap: function() { return /* binding */ wrap; }
12730
12753
  /* harmony export */ });
12731
12754
  /* harmony import */ var jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27795);
@@ -12780,7 +12803,7 @@ const WRAP_NODES = new Set([
12780
12803
  * otherwise it wraps free text in an element.
12781
12804
  */ function findOrCreateWrapper(commitStyle, font, jodit) {
12782
12805
  if (commitStyle.elementIsBlock) {
12783
- const box = jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.up(font, (node)=>jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(node) && !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(node, WRAP_NODES), jodit.editor);
12806
+ const box = jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.up(font, (node)=>jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(node) && !jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(node, WRAP_NODES) && !hasBlockChildren(node), jodit.editor);
12784
12807
  if (box) {
12785
12808
  return box;
12786
12809
  }
@@ -12789,6 +12812,13 @@ const WRAP_NODES = new Set([
12789
12812
  (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_1__.attr)(font, 'size', null);
12790
12813
  return font;
12791
12814
  }
12815
+ /**
12816
+ * A block that itself contains block-level children is a layout container:
12817
+ * replacing it wholesale would merge all its blocks into the new element,
12818
+ * so the selection must be wrapped in a new block inside it instead.
12819
+ */ function hasBlockChildren(node) {
12820
+ return Array.from(node.childNodes).some((child)=>jodit_core_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(child));
12821
+ }
12792
12822
 
12793
12823
 
12794
12824
  /***/ }),
@@ -13162,12 +13192,23 @@ const transactions = {
13162
13192
  },
13163
13193
  [states.UNWRAP]: {
13164
13194
  exec (value) {
13165
- if (value.element.attributes.length && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(value.element, value.style.element)) {
13195
+ const { element, style, jodit } = value;
13196
+ if (element.attributes.length && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(element, style.element)) {
13197
+ return (0,_swc_helpers_object_spread_props__WEBPACK_IMPORTED_MODULE_1__._)((0,_swc_helpers_object_spread__WEBPACK_IMPORTED_MODULE_0__._)({}, value), {
13198
+ next: states.REPLACE_DEFAULT
13199
+ });
13200
+ }
13201
+ // Unwrapping a block inside a container (e.g. an h3 inside a div)
13202
+ // leaves bare inline content there: the wrapNodes plugin restores
13203
+ // paragraphs only at the editor root. Replace such a block with
13204
+ // the default tag instead.
13205
+ const parent = element.parentElement;
13206
+ if (style.elementIsBlock && !style.elementIsDefault && parent && parent !== jodit.editor && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isBlock(parent) && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(parent, jodit_core_selection_style_api__WEBPACK_IMPORTED_MODULE_5__.WRAP_NODES)) {
13166
13207
  return (0,_swc_helpers_object_spread_props__WEBPACK_IMPORTED_MODULE_1__._)((0,_swc_helpers_object_spread__WEBPACK_IMPORTED_MODULE_0__._)({}, value), {
13167
13208
  next: states.REPLACE_DEFAULT
13168
13209
  });
13169
13210
  }
13170
- jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.unwrap(value.element);
13211
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.unwrap(element);
13171
13212
  return (0,_swc_helpers_object_spread_props__WEBPACK_IMPORTED_MODULE_1__._)((0,_swc_helpers_object_spread__WEBPACK_IMPORTED_MODULE_0__._)({}, value), {
13172
13213
  mode: jodit_core_selection_style_constants__WEBPACK_IMPORTED_MODULE_6__.UNWRAP,
13173
13214
  next: states.END