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
@@ -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
  */
@@ -1779,7 +1779,7 @@ __webpack_require__.r(__webpack_exports__);
1779
1779
  * ```
1780
1780
  * @packageDocumentation
1781
1781
  * @module constants
1782
- */ const APP_VERSION = "4.15.7";
1782
+ */ const APP_VERSION = "4.15.9";
1783
1783
  // prettier-ignore
1784
1784
  const ES = "es2021";
1785
1785
  const IS_ES_MODERN = true;
@@ -17844,13 +17844,20 @@ class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE_10__.ViewWithToolbar
17844
17844
  /**
17845
17845
  * Return source element value
17846
17846
  */ getElementValue() {
17847
+ if (this.element === this.container && this.__inlineElementValue !== undefined) {
17848
+ return this.__inlineElementValue;
17849
+ }
17847
17850
  return this.element.value !== undefined ? this.element.value : this.element.innerHTML;
17848
17851
  }
17849
17852
  __setElementValue(value) {
17850
17853
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_5__.isString)(value)) {
17851
17854
  throw (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_5__.error)('value must be string');
17852
17855
  }
17853
- if (this.element !== this.container && value !== this.getElementValue()) {
17856
+ if (this.element === this.container) {
17857
+ this.__inlineElementValue = value;
17858
+ return;
17859
+ }
17860
+ if (value !== this.getElementValue()) {
17854
17861
  const data = {
17855
17862
  value
17856
17863
  };
@@ -18575,6 +18582,10 @@ class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE_10__.ViewWithToolbar
18575
18582
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "isJodit", true), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "commands", new Map()), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__selectionLocked", null), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__wasReadOnly", false), /**
18576
18583
  * Editor has focus in this time
18577
18584
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "editorIsActive", false), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "selection", void 0), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__mode", jodit_core_constants__WEBPACK_IMPORTED_MODULE_2__.MODE_WYSIWYG), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__callChangeCount", 0), /**
18585
+ * In inline mode the source element is the editor container, so its
18586
+ * `innerHTML` is the editor's own markup rather than the value. Keep the
18587
+ * value last synchronised to it here instead.
18588
+ */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__inlineElementValue", void 0), /**
18578
18589
  * Don't raise a change event
18579
18590
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__isSilentChange", false), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "currentPlace", {
18580
18591
  options: this.__options,
@@ -29312,7 +29323,14 @@ function filterStyleProperties(style, allowed) {
29312
29323
  // a pending-format marker the user is about to type into (#1291). `current`
29313
29324
  // is captured before a click moves the caret, so also check the live caret.
29314
29325
  const liveCaret = jodit.s.isCollapsed() ? jodit.s.range.startContainer : null;
29315
- 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));
29326
+ 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));
29327
+ }
29328
+ /**
29329
+ * An element with an `id`, or an `<a>` with a `name`, is where an in-page link
29330
+ * (`#fragment`) lands. It is usually empty (`<a name="top"></a>`), and removing
29331
+ * it silently breaks every link that points at it.
29332
+ */ function isFragmentTarget(element) {
29333
+ return element.hasAttribute('id') || element.nodeName === 'A' && element.hasAttribute('name');
29316
29334
  }
29317
29335
 
29318
29336
 
@@ -36613,10 +36631,12 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
36613
36631
 
36614
36632
  "use strict";
36615
36633
  /* unused harmony export mobile */
36616
- /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28077);
36617
- /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65946);
36618
- /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2496);
36619
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3244);
36634
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23211);
36635
+ /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28077);
36636
+ /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(65946);
36637
+ /* harmony import */ var jodit_core_helpers_checker_is_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(85932);
36638
+ /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2496);
36639
+ /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3244);
36620
36640
  /*!
36621
36641
  * Jodit Editor (https://xdsoft.net/jodit/)
36622
36642
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -36629,6 +36649,8 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
36629
36649
 
36630
36650
 
36631
36651
 
36652
+
36653
+
36632
36654
  const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n';
36633
36655
  /**
36634
36656
  * Constrain a responsive breakpoint set (`buttonsMD/SM/XS`) to the buttons the
@@ -36642,13 +36664,13 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
36642
36664
  * the standard grouped mobile layout — groups, separators and `dots` — is
36643
36665
  * preserved. See #1389.
36644
36666
  */ function fitToButtons(list, editor) {
36645
- const allowed = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons), editor);
36667
+ const allowed = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons), editor);
36646
36668
  const groups = editor.getRegisteredButtonGroups();
36647
36669
  let changed = false;
36648
36670
  let hadDots = false;
36649
36671
  const flat = [];
36650
36672
  for (const item of list){
36651
- if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.isButtonGroup)(item)) {
36673
+ if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.isButtonGroup)(item)) {
36652
36674
  const members = [
36653
36675
  ...item.buttons,
36654
36676
  ...groups[item.group] ?? []
@@ -36685,17 +36707,31 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
36685
36707
  // Keep the "show all" overflow button only if some requested button is still
36686
36708
  // hidden at this breakpoint.
36687
36709
  if (hadDots) {
36688
- const shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.flatButtonsSet)(cleaned, editor);
36689
- if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.toArray)(allowed).some((button)=>!shown.has(button))) {
36710
+ const shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.flatButtonsSet)(cleaned, editor);
36711
+ if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(allowed).some((button)=>!shown.has(button))) {
36690
36712
  cleaned.push('dots');
36691
36713
  }
36692
36714
  }
36693
36715
  return cleaned;
36694
36716
  }
36717
+ /**
36718
+ * The width that decides which breakpoint set the toolbar uses. A toolbar
36719
+ * rendered into an external container (`toolbar` set to an element or a
36720
+ * selector) lays out in that container, so its width is what matters there.
36721
+ */ function adaptiveWidth(editor) {
36722
+ const { toolbar } = editor.o;
36723
+ if ((0,jodit_core_helpers_checker_is_string__WEBPACK_IMPORTED_MODULE_3__.isString)(toolbar) || jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(toolbar)) {
36724
+ const width = editor.toolbarContainer.offsetWidth;
36725
+ if (width) {
36726
+ return width;
36727
+ }
36728
+ }
36729
+ return (editor.container.parentElement ?? editor.container).offsetWidth;
36730
+ }
36695
36731
  /**
36696
36732
  * Rebuild toolbar in depends on editor's width
36697
36733
  */ function mobile(editor) {
36698
- let timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons);
36734
+ let timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
36699
36735
  if (editor.o.mobileTapTimeout) {
36700
36736
  // Emulate double tap
36701
36737
  editor.e.on('touchend', (e)=>{
@@ -36712,8 +36748,8 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
36712
36748
  }
36713
36749
  editor.e.on('getDiffButtons.mobile', (toolbar)=>{
36714
36750
  if (toolbar === editor.toolbar) {
36715
- const buttons = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons), editor), flatStore = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.flatButtonsSet)(store, editor);
36716
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.toArray)(buttons).reduce((acc, item)=>{
36751
+ const buttons = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.flatButtonsSet)((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons), editor), flatStore = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.flatButtonsSet)(store, editor);
36752
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(buttons).reduce((acc, item)=>{
36717
36753
  if (!flatStore.has(item)) {
36718
36754
  acc.push(item);
36719
36755
  }
@@ -36726,18 +36762,21 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
36726
36762
  if (!editor.o.toolbar) {
36727
36763
  return;
36728
36764
  }
36729
- const width = (editor.container.parentElement ?? editor.container).offsetWidth;
36730
36765
  const newStore = (()=>{
36731
- if (editor.isFullSize || width >= editor.o.sizeLG) {
36732
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons);
36766
+ if (editor.isFullSize) {
36767
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
36768
+ }
36769
+ const width = adaptiveWidth(editor);
36770
+ if (width >= editor.o.sizeLG) {
36771
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
36733
36772
  }
36734
36773
  if (width >= editor.o.sizeMD) {
36735
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsMD), editor);
36774
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsMD), editor);
36736
36775
  }
36737
36776
  if (width >= editor.o.sizeSM) {
36738
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsSM), editor);
36777
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsSM), editor);
36739
36778
  }
36740
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsXS), editor);
36779
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsXS), editor);
36741
36780
  })();
36742
36781
  if (newStore.toString() !== store.toString()) {
36743
36782
  store = newStore;
@@ -36747,7 +36786,7 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
36747
36786
  }).on(editor.ow, 'load resize', ()=>editor.e.fire('recalcAdaptive'));
36748
36787
  }
36749
36788
  }
36750
- jodit_core_global__WEBPACK_IMPORTED_MODULE_0__.pluginSystem.add('mobile', mobile);
36789
+ jodit_core_global__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('mobile', mobile);
36751
36790
 
36752
36791
 
36753
36792
  /***/ }),
@@ -44720,25 +44759,20 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
44720
44759
  /******/ /* webpack/runtime/chunk loaded */
44721
44760
  /******/ !function() {
44722
44761
  /******/ var deferred = [];
44723
- /******/ __webpack_require__.O = function(result, chunkIds, fn, priority) {
44762
+ /******/ __webpack_require__.O = function(result, chunkIds, fn) {
44724
44763
  /******/ if(chunkIds) {
44725
- /******/ priority = priority || 0;
44726
- /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
44727
- /******/ deferred[i] = [chunkIds, fn, priority];
44764
+ /******/ deferred.push([chunkIds, fn]);
44728
44765
  /******/ return;
44729
44766
  /******/ }
44730
- /******/ var notFulfilled = Infinity;
44731
44767
  /******/ for (var i = 0; i < deferred.length; i++) {
44732
44768
  /******/ var chunkIds = deferred[i][0];
44733
44769
  /******/ var fn = deferred[i][1];
44734
- /******/ var priority = deferred[i][2];
44735
44770
  /******/ var fulfilled = true;
44736
44771
  /******/ for (var j = 0; j < chunkIds.length; j++) {
44737
- /******/ if (((priority & 1) === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {
44772
+ /******/ if (__webpack_require__.O.j(chunkIds[j])) {
44738
44773
  /******/ chunkIds.splice(j--, 1);
44739
44774
  /******/ } else {
44740
44775
  /******/ fulfilled = false;
44741
- /******/ if(priority < notFulfilled) notFulfilled = priority;
44742
44776
  /******/ }
44743
44777
  /******/ }
44744
44778
  /******/ if(fulfilled) {