jodit 4.13.25 → 4.13.26

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 (54) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +4 -4
  4. package/es2015/jodit.js +36 -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 +4 -4
  18. package/es2021/jodit.js +36 -11
  19. package/es2021/jodit.min.js +4 -4
  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 +4 -4
  28. package/es2021.en/jodit.js +36 -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 +36 -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/ui/popup/popup.js +13 -1
  52. package/esm/modules/toolbar/button/button.js +19 -11
  53. package/esm/modules/widget/color-picker/color-picker.js +8 -0
  54. package/package.json +1 -1
@@ -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.26
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.26";
1847
1847
  // prettier-ignore
1848
1848
  const ES = "es2021";
1849
1849
  const IS_ES_MODERN = true;
@@ -16465,6 +16465,15 @@ class Popup extends jodit_core_ui_group_group__WEBPACK_IMPORTED_MODULE_9__.UIGro
16465
16465
  this.j.e.fire(this, 'beforeClose');
16466
16466
  this.j.e.fire('beforePopupClose', this);
16467
16467
  this.__removeGlobalListeners();
16468
+ // Blur a focused control (e.g. the color picker hex input) before
16469
+ // the container goes away. Chrome fires `blur`/`change` for a
16470
+ // removed focused element in the middle of `removeChild`, Firefox
16471
+ // does not fire them at all. Blurring first makes both browsers
16472
+ // run those handlers while the popup is still in the DOM. See #1458
16473
+ const { activeElement } = this.od;
16474
+ 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)) {
16475
+ activeElement.blur();
16476
+ }
16468
16477
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_4__.Dom.safeRemove(this.container);
16469
16478
  return this;
16470
16479
  }
@@ -24071,15 +24080,23 @@ class ToolbarButton extends jodit_core_ui_button__WEBPACK_IMPORTED_MODULE_19__.U
24071
24080
  return this.openedPopup;
24072
24081
  }
24073
24082
  __closePopup() {
24074
- if (this.openedPopup) {
24075
- this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
24076
- this.state.activated = false;
24077
- this.openedPopup.close();
24078
- this.openedPopup.destruct();
24079
- this.openedPopup = null;
24080
- if (this.trigger) {
24081
- (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_17__.attr)(this.trigger, 'aria-expanded', false);
24082
- }
24083
+ const popup = this.openedPopup;
24084
+ if (!popup) {
24085
+ return;
24086
+ }
24087
+ // Detach first: removing a popup that holds the focused element
24088
+ // makes Chrome fire `blur`/`change` on it synchronously, and a
24089
+ // handler there may call the popup's `close` callback again.
24090
+ // A re-entrant call must be a no-op, otherwise it destructs the
24091
+ // popup while the outer `removeChild` is still running and Chrome
24092
+ // throws NotFoundError. See #1458
24093
+ this.openedPopup = null;
24094
+ this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
24095
+ this.state.activated = false;
24096
+ popup.close();
24097
+ popup.destruct();
24098
+ if (this.trigger) {
24099
+ (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_17__.attr)(this.trigger, 'aria-expanded', false);
24083
24100
  }
24084
24101
  }
24085
24102
  /**
@@ -25426,8 +25443,15 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
25426
25443
  const { extra } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
25427
25444
  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>`));
25428
25445
  const { hexInput } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
25446
+ // Enter applies the value and closes the popup; removing the focused
25447
+ // input then makes Chrome fire `change` on it, which would apply the
25448
+ // same color a second time and toggle it off again. See #1459
25449
+ let appliedHexValue = null;
25429
25450
  const applyHexInput = ()=>{
25430
25451
  const raw = hexInput.value.trim();
25452
+ if (raw === appliedHexValue) {
25453
+ return;
25454
+ }
25431
25455
  const isHex = /^#?[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(raw);
25432
25456
  const isRgb = /^rgba?\([\d\s.,%]+\)$/i.test(raw);
25433
25457
  if (!isHex && !isRgb) {
@@ -25435,6 +25459,7 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
25435
25459
  }
25436
25460
  const color = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(isHex && !raw.startsWith('#') ? '#' + raw : raw);
25437
25461
  if (color && (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.isFunction)(callback)) {
25462
+ appliedHexValue = raw;
25438
25463
  callback(color);
25439
25464
  }
25440
25465
  };