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
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.25
4
+ * Version: v4.13.26
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.25";
1852
+ */ const APP_VERSION = "4.13.26";
1853
1853
  // prettier-ignore
1854
1854
  const ES = "es2015";
1855
1855
  const IS_ES_MODERN = true;
@@ -16595,6 +16595,15 @@ class Popup extends jodit_core_ui_group_group__WEBPACK_IMPORTED_MODULE_11__.UIGr
16595
16595
  this.j.e.fire(this, 'beforeClose');
16596
16596
  this.j.e.fire('beforePopupClose', this);
16597
16597
  this.__removeGlobalListeners();
16598
+ // Blur a focused control (e.g. the color picker hex input) before
16599
+ // the container goes away. Chrome fires `blur`/`change` for a
16600
+ // removed focused element in the middle of `removeChild`, Firefox
16601
+ // does not fire them at all. Blurring first makes both browsers
16602
+ // run those handlers while the popup is still in the DOM. See #1458
16603
+ const { activeElement } = this.od;
16604
+ if (activeElement && activeElement !== this.container && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_6__.Dom.isOrContains(this.container, activeElement) && (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_8__.isFunction)(activeElement.blur)) {
16605
+ activeElement.blur();
16606
+ }
16598
16607
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_6__.Dom.safeRemove(this.container);
16599
16608
  return this;
16600
16609
  }
@@ -24284,15 +24293,23 @@ class ToolbarButton extends jodit_core_ui_button__WEBPACK_IMPORTED_MODULE_21__.U
24284
24293
  return this.openedPopup;
24285
24294
  }
24286
24295
  __closePopup() {
24287
- if (this.openedPopup) {
24288
- this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
24289
- this.state.activated = false;
24290
- this.openedPopup.close();
24291
- this.openedPopup.destruct();
24292
- this.openedPopup = null;
24293
- if (this.trigger) {
24294
- (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_19__.attr)(this.trigger, 'aria-expanded', false);
24295
- }
24296
+ const popup = this.openedPopup;
24297
+ if (!popup) {
24298
+ return;
24299
+ }
24300
+ // Detach first: removing a popup that holds the focused element
24301
+ // makes Chrome fire `blur`/`change` on it synchronously, and a
24302
+ // handler there may call the popup's `close` callback again.
24303
+ // A re-entrant call must be a no-op, otherwise it destructs the
24304
+ // popup while the outer `removeChild` is still running and Chrome
24305
+ // throws NotFoundError. See #1458
24306
+ this.openedPopup = null;
24307
+ this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
24308
+ this.state.activated = false;
24309
+ popup.close();
24310
+ popup.destruct();
24311
+ if (this.trigger) {
24312
+ (0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_19__.attr)(this.trigger, 'aria-expanded', false);
24296
24313
  }
24297
24314
  }
24298
24315
  /**
@@ -25646,8 +25663,15 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
25646
25663
  const { extra } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
25647
25664
  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>`));
25648
25665
  const { hexInput } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
25666
+ // Enter applies the value and closes the popup; removing the focused
25667
+ // input then makes Chrome fire `change` on it, which would apply the
25668
+ // same color a second time and toggle it off again. See #1459
25669
+ let appliedHexValue = null;
25649
25670
  const applyHexInput = ()=>{
25650
25671
  const raw = hexInput.value.trim();
25672
+ if (raw === appliedHexValue) {
25673
+ return;
25674
+ }
25651
25675
  const isHex = /^#?[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(raw);
25652
25676
  const isRgb = /^rgba?\([\d\s.,%]+\)$/i.test(raw);
25653
25677
  if (!isHex && !isRgb) {
@@ -25655,6 +25679,7 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
25655
25679
  }
25656
25680
  const color = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(isHex && !raw.startsWith('#') ? '#' + raw : raw);
25657
25681
  if (color && (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.isFunction)(callback)) {
25682
+ appliedHexValue = raw;
25658
25683
  callback(color);
25659
25684
  }
25660
25685
  };