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
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.15.7
4
+ * Version: v4.15.9
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1785,7 +1785,7 @@ __webpack_require__.r(__webpack_exports__);
1785
1785
  * ```
1786
1786
  * @packageDocumentation
1787
1787
  * @module constants
1788
- */ const APP_VERSION = "4.15.7";
1788
+ */ const APP_VERSION = "4.15.9";
1789
1789
  // prettier-ignore
1790
1790
  const ES = "es2015";
1791
1791
  const IS_ES_MODERN = true;
@@ -17984,13 +17984,20 @@ class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE_11__.ViewWithToolbar
17984
17984
  /**
17985
17985
  * Return source element value
17986
17986
  */ getElementValue() {
17987
+ if (this.element === this.container && this.__inlineElementValue !== undefined) {
17988
+ return this.__inlineElementValue;
17989
+ }
17987
17990
  return this.element.value !== undefined ? this.element.value : this.element.innerHTML;
17988
17991
  }
17989
17992
  __setElementValue(value) {
17990
17993
  if (!(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_6__.isString)(value)) {
17991
17994
  throw (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_6__.error)('value must be string');
17992
17995
  }
17993
- if (this.element !== this.container && value !== this.getElementValue()) {
17996
+ if (this.element === this.container) {
17997
+ this.__inlineElementValue = value;
17998
+ return;
17999
+ }
18000
+ if (value !== this.getElementValue()) {
17994
18001
  const data = {
17995
18002
  value
17996
18003
  };
@@ -18716,6 +18723,10 @@ class Jodit extends jodit_modules__WEBPACK_IMPORTED_MODULE_11__.ViewWithToolbar
18716
18723
  */ (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), /**
18717
18724
  * Editor has focus in this time
18718
18725
  */ (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_3__.MODE_WYSIWYG), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__callChangeCount", 0), /**
18726
+ * In inline mode the source element is the editor container, so its
18727
+ * `innerHTML` is the editor's own markup rather than the value. Keep the
18728
+ * value last synchronised to it here instead.
18729
+ */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__inlineElementValue", void 0), /**
18719
18730
  * Don't raise a change event
18720
18731
  */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "__isSilentChange", false), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "currentPlace", {
18721
18732
  options: this.__options,
@@ -29598,7 +29609,14 @@ function filterStyleProperties(style, allowed) {
29598
29609
  // a pending-format marker the user is about to type into (#1291). `current`
29599
29610
  // is captured before a click moves the caret, so also check the live caret.
29600
29611
  const liveCaret = jodit.s.isCollapsed() ? jodit.s.range.startContainer : null;
29601
- 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));
29612
+ 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));
29613
+ }
29614
+ /**
29615
+ * An element with an `id`, or an `<a>` with a `name`, is where an in-page link
29616
+ * (`#fragment`) lands. It is usually empty (`<a name="top"></a>`), and removing
29617
+ * it silently breaks every link that points at it.
29618
+ */ function isFragmentTarget(element) {
29619
+ return element.hasAttribute('id') || element.nodeName === 'A' && element.hasAttribute('name');
29602
29620
  }
29603
29621
 
29604
29622
 
@@ -37632,10 +37650,12 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
37632
37650
 
37633
37651
  "use strict";
37634
37652
  /* unused harmony export mobile */
37635
- /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28077);
37636
- /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65946);
37637
- /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2496);
37638
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3244);
37653
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23211);
37654
+ /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28077);
37655
+ /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(65946);
37656
+ /* harmony import */ var jodit_core_helpers_checker_is_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(85932);
37657
+ /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2496);
37658
+ /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3244);
37639
37659
  /*!
37640
37660
  * Jodit Editor (https://xdsoft.net/jodit/)
37641
37661
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -37648,6 +37668,8 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
37648
37668
 
37649
37669
 
37650
37670
 
37671
+
37672
+
37651
37673
  const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n';
37652
37674
  /**
37653
37675
  * Constrain a responsive breakpoint set (`buttonsMD/SM/XS`) to the buttons the
@@ -37661,13 +37683,13 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37661
37683
  * the standard grouped mobile layout — groups, separators and `dots` — is
37662
37684
  * preserved. See #1389.
37663
37685
  */ function fitToButtons(list, editor) {
37664
- 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);
37686
+ 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);
37665
37687
  const groups = editor.getRegisteredButtonGroups();
37666
37688
  let changed = false;
37667
37689
  let hadDots = false;
37668
37690
  const flat = [];
37669
37691
  for (const item of list){
37670
- if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.isButtonGroup)(item)) {
37692
+ if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.isButtonGroup)(item)) {
37671
37693
  var _groups_item_group;
37672
37694
  const members = [
37673
37695
  ...item.buttons,
@@ -37705,17 +37727,32 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37705
37727
  // Keep the "show all" overflow button only if some requested button is still
37706
37728
  // hidden at this breakpoint.
37707
37729
  if (hadDots) {
37708
- const shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.flatButtonsSet)(cleaned, editor);
37709
- if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.toArray)(allowed).some((button)=>!shown.has(button))) {
37730
+ const shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.flatButtonsSet)(cleaned, editor);
37731
+ if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(allowed).some((button)=>!shown.has(button))) {
37710
37732
  cleaned.push('dots');
37711
37733
  }
37712
37734
  }
37713
37735
  return cleaned;
37714
37736
  }
37737
+ /**
37738
+ * The width that decides which breakpoint set the toolbar uses. A toolbar
37739
+ * rendered into an external container (`toolbar` set to an element or a
37740
+ * selector) lays out in that container, so its width is what matters there.
37741
+ */ function adaptiveWidth(editor) {
37742
+ var _editor_container_parentElement;
37743
+ const { toolbar } = editor.o;
37744
+ 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)) {
37745
+ const width = editor.toolbarContainer.offsetWidth;
37746
+ if (width) {
37747
+ return width;
37748
+ }
37749
+ }
37750
+ return ((_editor_container_parentElement = editor.container.parentElement) !== null && _editor_container_parentElement !== void 0 ? _editor_container_parentElement : editor.container).offsetWidth;
37751
+ }
37715
37752
  /**
37716
37753
  * Rebuild toolbar in depends on editor's width
37717
37754
  */ function mobile(editor) {
37718
- let timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons);
37755
+ let timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
37719
37756
  if (editor.o.mobileTapTimeout) {
37720
37757
  // Emulate double tap
37721
37758
  editor.e.on('touchend', (e)=>{
@@ -37732,8 +37769,8 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37732
37769
  }
37733
37770
  editor.e.on('getDiffButtons.mobile', (toolbar)=>{
37734
37771
  if (toolbar === editor.toolbar) {
37735
- 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);
37736
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.toArray)(buttons).reduce((acc, item)=>{
37772
+ 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);
37773
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(buttons).reduce((acc, item)=>{
37737
37774
  if (!flatStore.has(item)) {
37738
37775
  acc.push(item);
37739
37776
  }
@@ -37743,22 +37780,24 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37743
37780
  });
37744
37781
  if (editor.o.toolbarAdaptive) {
37745
37782
  editor.e.on('resize afterInit recalcAdaptive changePlace afterAddPlace', ()=>{
37746
- var _editor_container_parentElement;
37747
37783
  if (!editor.o.toolbar) {
37748
37784
  return;
37749
37785
  }
37750
- const width = ((_editor_container_parentElement = editor.container.parentElement) !== null && _editor_container_parentElement !== void 0 ? _editor_container_parentElement : editor.container).offsetWidth;
37751
37786
  const newStore = (()=>{
37752
- if (editor.isFullSize || width >= editor.o.sizeLG) {
37753
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons);
37787
+ if (editor.isFullSize) {
37788
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
37789
+ }
37790
+ const width = adaptiveWidth(editor);
37791
+ if (width >= editor.o.sizeLG) {
37792
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
37754
37793
  }
37755
37794
  if (width >= editor.o.sizeMD) {
37756
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsMD), editor);
37795
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsMD), editor);
37757
37796
  }
37758
37797
  if (width >= editor.o.sizeSM) {
37759
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsSM), editor);
37798
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsSM), editor);
37760
37799
  }
37761
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsXS), editor);
37800
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsXS), editor);
37762
37801
  })();
37763
37802
  if (newStore.toString() !== store.toString()) {
37764
37803
  var _editor_toolbar;
@@ -37769,7 +37808,7 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37769
37808
  }).on(editor.ow, 'load resize', ()=>editor.e.fire('recalcAdaptive'));
37770
37809
  }
37771
37810
  }
37772
- jodit_core_global__WEBPACK_IMPORTED_MODULE_0__.pluginSystem.add('mobile', mobile);
37811
+ jodit_core_global__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('mobile', mobile);
37773
37812
 
37774
37813
 
37775
37814
  /***/ }),
@@ -46961,25 +47000,20 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
46961
47000
  /******/ /* webpack/runtime/chunk loaded */
46962
47001
  /******/ !function() {
46963
47002
  /******/ var deferred = [];
46964
- /******/ __webpack_require__.O = function(result, chunkIds, fn, priority) {
47003
+ /******/ __webpack_require__.O = function(result, chunkIds, fn) {
46965
47004
  /******/ if(chunkIds) {
46966
- /******/ priority = priority || 0;
46967
- /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
46968
- /******/ deferred[i] = [chunkIds, fn, priority];
47005
+ /******/ deferred.push([chunkIds, fn]);
46969
47006
  /******/ return;
46970
47007
  /******/ }
46971
- /******/ var notFulfilled = Infinity;
46972
47008
  /******/ for (var i = 0; i < deferred.length; i++) {
46973
47009
  /******/ var chunkIds = deferred[i][0];
46974
47010
  /******/ var fn = deferred[i][1];
46975
- /******/ var priority = deferred[i][2];
46976
47011
  /******/ var fulfilled = true;
46977
47012
  /******/ for (var j = 0; j < chunkIds.length; j++) {
46978
- /******/ if (((priority & 1) === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {
47013
+ /******/ if (__webpack_require__.O.j(chunkIds[j])) {
46979
47014
  /******/ chunkIds.splice(j--, 1);
46980
47015
  /******/ } else {
46981
47016
  /******/ fulfilled = false;
46982
- /******/ if(priority < notFulfilled) notFulfilled = priority;
46983
47017
  /******/ }
46984
47018
  /******/ }
46985
47019
  /******/ if(fulfilled) {