jodit 4.13.25 → 4.13.27

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 (55) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +4 -4
  4. package/es2015/jodit.js +44 -11
  5. package/es2015/jodit.min.js +4 -4
  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 +4 -4
  13. package/es2018/jodit.min.js +4 -4
  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 +5 -5
  18. package/es2021/jodit.js +43 -11
  19. package/es2021/jodit.min.js +5 -5
  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 +5 -5
  28. package/es2021.en/jodit.js +43 -11
  29. package/es2021.en/jodit.min.js +25 -25
  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 +44 -11
  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/selection/style/api/get-suit-parent.js +10 -0
  52. package/esm/core/ui/popup/popup.js +13 -1
  53. package/esm/modules/toolbar/button/button.js +19 -11
  54. package/esm/modules/widget/color-picker/color-picker.js +8 -0
  55. package/package.json +1 -1
package/es2021/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit - Jodit is an awesome and useful wysiwyg editor with filebrowser
3
3
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/jodit/)
4
- * Version: v4.13.25
4
+ * Version: v4.13.27
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1843,7 +1843,7 @@ __webpack_require__.r(__webpack_exports__);
1843
1843
  * ```
1844
1844
  * @packageDocumentation
1845
1845
  * @module constants
1846
- */ const APP_VERSION = "4.13.25";
1846
+ */ const APP_VERSION = "4.13.27";
1847
1847
  // prettier-ignore
1848
1848
  const ES = "es2021";
1849
1849
  const IS_ES_MODERN = true;
@@ -11911,6 +11911,13 @@ class Selection {
11911
11911
  if (style.isElementCommit && style.elementIsBlock && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(parentNode)) {
11912
11912
  return getSuitParent(style, parentNode, root);
11913
11913
  }
11914
+ // <li>|test|</li> => apply the CSS style to the <li> itself, so the
11915
+ // list marker (bullet/number) gets the same color and size as the text.
11916
+ // Only for pure style commits: bold/italic keep wrapping the content.
11917
+ // See #1460
11918
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(parentNode, 'li') && !style.isElementCommit && style.options.attributes?.style) {
11919
+ return parentNode;
11920
+ }
11914
11921
  if ((0,_is_suit_element__WEBPACK_IMPORTED_MODULE_2__.isSuitElement)(style, parentNode, false) && (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(parentNode) || style.elementIsBlock)) {
11915
11922
  return parentNode;
11916
11923
  }
@@ -16465,6 +16472,15 @@ class Popup extends jodit_core_ui_group_group__WEBPACK_IMPORTED_MODULE_9__.UIGro
16465
16472
  this.j.e.fire(this, 'beforeClose');
16466
16473
  this.j.e.fire('beforePopupClose', this);
16467
16474
  this.__removeGlobalListeners();
16475
+ // Blur a focused control (e.g. the color picker hex input) before
16476
+ // the container goes away. Chrome fires `blur`/`change` for a
16477
+ // removed focused element in the middle of `removeChild`, Firefox
16478
+ // does not fire them at all. Blurring first makes both browsers
16479
+ // run those handlers while the popup is still in the DOM. See #1458
16480
+ const { activeElement } = this.od;
16481
+ if (activeElement && activeElement !== this.container && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_4__.Dom.isOrContains(this.container, activeElement) && (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_6__.isFunction)(activeElement.blur)) {
16482
+ activeElement.blur();
16483
+ }
16468
16484
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_4__.Dom.safeRemove(this.container);
16469
16485
  return this;
16470
16486
  }
@@ -24094,15 +24110,23 @@ class ToolbarButton extends jodit_core_ui_button__WEBPACK_IMPORTED_MODULE_19__.U
24094
24110
  return this.openedPopup;
24095
24111
  }
24096
24112
  __closePopup() {
24097
- if (this.openedPopup) {
24098
- this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
24099
- this.state.activated = false;
24100
- this.openedPopup.close();
24101
- this.openedPopup.destruct();
24102
- this.openedPopup = null;
24103
- if (this.trigger) {
24104
- (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_17__.attr)(this.trigger, 'aria-expanded', false);
24105
- }
24113
+ const popup = this.openedPopup;
24114
+ if (!popup) {
24115
+ return;
24116
+ }
24117
+ // Detach first: removing a popup that holds the focused element
24118
+ // makes Chrome fire `blur`/`change` on it synchronously, and a
24119
+ // handler there may call the popup's `close` callback again.
24120
+ // A re-entrant call must be a no-op, otherwise it destructs the
24121
+ // popup while the outer `removeChild` is still running and Chrome
24122
+ // throws NotFoundError. See #1458
24123
+ this.openedPopup = null;
24124
+ this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
24125
+ this.state.activated = false;
24126
+ popup.close();
24127
+ popup.destruct();
24128
+ if (this.trigger) {
24129
+ (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_17__.attr)(this.trigger, 'aria-expanded', false);
24106
24130
  }
24107
24131
  }
24108
24132
  /**
@@ -25449,8 +25473,15 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
25449
25473
  const { extra } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
25450
25474
  extra.appendChild(editor.c.fromHTML(`<div class="${cn}__hex"><input data-ref="hexInput" type="text" spellcheck="false" aria-label="HEX" placeholder="#FF0000" value="${valueHex || ''}"/></div>`));
25451
25475
  const { hexInput } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
25476
+ // Enter applies the value and closes the popup; removing the focused
25477
+ // input then makes Chrome fire `change` on it, which would apply the
25478
+ // same color a second time and toggle it off again. See #1459
25479
+ let appliedHexValue = null;
25452
25480
  const applyHexInput = ()=>{
25453
25481
  const raw = hexInput.value.trim();
25482
+ if (raw === appliedHexValue) {
25483
+ return;
25484
+ }
25454
25485
  const isHex = /^#?[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(raw);
25455
25486
  const isRgb = /^rgba?\([\d\s.,%]+\)$/i.test(raw);
25456
25487
  if (!isHex && !isRgb) {
@@ -25458,6 +25489,7 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
25458
25489
  }
25459
25490
  const color = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(isHex && !raw.startsWith('#') ? '#' + raw : raw);
25460
25491
  if (color && (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.isFunction)(callback)) {
25492
+ appliedHexValue = raw;
25461
25493
  callback(color);
25462
25494
  }
25463
25495
  };