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/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.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,
@@ -29386,7 +29397,14 @@ function filterStyleProperties(style, allowed) {
29386
29397
  // a pending-format marker the user is about to type into (#1291). `current`
29387
29398
  // is captured before a click moves the caret, so also check the live caret.
29388
29399
  const liveCaret = jodit.s.isCollapsed() ? jodit.s.range.startContainer : null;
29389
- 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));
29400
+ 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));
29401
+ }
29402
+ /**
29403
+ * An element with an `id`, or an `<a>` with a `name`, is where an in-page link
29404
+ * (`#fragment`) lands. It is usually empty (`<a name="top"></a>`), and removing
29405
+ * it silently breaks every link that points at it.
29406
+ */ function isFragmentTarget(element) {
29407
+ return element.hasAttribute('id') || element.nodeName === 'A' && element.hasAttribute('name');
29390
29408
  }
29391
29409
 
29392
29410
 
@@ -37366,10 +37384,12 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
37366
37384
 
37367
37385
  "use strict";
37368
37386
  /* unused harmony export mobile */
37369
- /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28077);
37370
- /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65946);
37371
- /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2496);
37372
- /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3244);
37387
+ /* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23211);
37388
+ /* harmony import */ var jodit_core_global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(28077);
37389
+ /* harmony import */ var jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(65946);
37390
+ /* harmony import */ var jodit_core_helpers_checker_is_string__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(85932);
37391
+ /* harmony import */ var jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2496);
37392
+ /* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(3244);
37373
37393
  /*!
37374
37394
  * Jodit Editor (https://xdsoft.net/jodit/)
37375
37395
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -37382,6 +37402,8 @@ jodit_config__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.dots = {
37382
37402
 
37383
37403
 
37384
37404
 
37405
+
37406
+
37385
37407
  const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n';
37386
37408
  /**
37387
37409
  * Constrain a responsive breakpoint set (`buttonsMD/SM/XS`) to the buttons the
@@ -37395,13 +37417,13 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37395
37417
  * the standard grouped mobile layout — groups, separators and `dots` — is
37396
37418
  * preserved. See #1389.
37397
37419
  */ function fitToButtons(list, editor) {
37398
- 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);
37420
+ 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);
37399
37421
  const groups = editor.getRegisteredButtonGroups();
37400
37422
  let changed = false;
37401
37423
  let hadDots = false;
37402
37424
  const flat = [];
37403
37425
  for (const item of list){
37404
- if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.isButtonGroup)(item)) {
37426
+ if ((0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.isButtonGroup)(item)) {
37405
37427
  const members = [
37406
37428
  ...item.buttons,
37407
37429
  ...groups[item.group] ?? []
@@ -37438,17 +37460,31 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37438
37460
  // Keep the "show all" overflow button only if some requested button is still
37439
37461
  // hidden at this breakpoint.
37440
37462
  if (hadDots) {
37441
- const shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_2__.flatButtonsSet)(cleaned, editor);
37442
- if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.toArray)(allowed).some((button)=>!shown.has(button))) {
37463
+ const shown = (0,jodit_core_ui_helpers_buttons__WEBPACK_IMPORTED_MODULE_4__.flatButtonsSet)(cleaned, editor);
37464
+ if ((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(allowed).some((button)=>!shown.has(button))) {
37443
37465
  cleaned.push('dots');
37444
37466
  }
37445
37467
  }
37446
37468
  return cleaned;
37447
37469
  }
37470
+ /**
37471
+ * The width that decides which breakpoint set the toolbar uses. A toolbar
37472
+ * rendered into an external container (`toolbar` set to an element or a
37473
+ * selector) lays out in that container, so its width is what matters there.
37474
+ */ function adaptiveWidth(editor) {
37475
+ const { toolbar } = editor.o;
37476
+ 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)) {
37477
+ const width = editor.toolbarContainer.offsetWidth;
37478
+ if (width) {
37479
+ return width;
37480
+ }
37481
+ }
37482
+ return (editor.container.parentElement ?? editor.container).offsetWidth;
37483
+ }
37448
37484
  /**
37449
37485
  * Rebuild toolbar in depends on editor's width
37450
37486
  */ function mobile(editor) {
37451
- let timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons);
37487
+ let timeout = 0, store = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
37452
37488
  if (editor.o.mobileTapTimeout) {
37453
37489
  // Emulate double tap
37454
37490
  editor.e.on('touchend', (e)=>{
@@ -37465,8 +37501,8 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37465
37501
  }
37466
37502
  editor.e.on('getDiffButtons.mobile', (toolbar)=>{
37467
37503
  if (toolbar === editor.toolbar) {
37468
- 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);
37469
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.toArray)(buttons).reduce((acc, item)=>{
37504
+ 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);
37505
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.toArray)(buttons).reduce((acc, item)=>{
37470
37506
  if (!flatStore.has(item)) {
37471
37507
  acc.push(item);
37472
37508
  }
@@ -37479,18 +37515,21 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37479
37515
  if (!editor.o.toolbar) {
37480
37516
  return;
37481
37517
  }
37482
- const width = (editor.container.parentElement ?? editor.container).offsetWidth;
37483
37518
  const newStore = (()=>{
37484
- if (editor.isFullSize || width >= editor.o.sizeLG) {
37485
- return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttons);
37519
+ if (editor.isFullSize) {
37520
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
37521
+ }
37522
+ const width = adaptiveWidth(editor);
37523
+ if (width >= editor.o.sizeLG) {
37524
+ return (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttons);
37486
37525
  }
37487
37526
  if (width >= editor.o.sizeMD) {
37488
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsMD), editor);
37527
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsMD), editor);
37489
37528
  }
37490
37529
  if (width >= editor.o.sizeSM) {
37491
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsSM), editor);
37530
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsSM), editor);
37492
37531
  }
37493
- return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.splitArray)(editor.o.buttonsXS), editor);
37532
+ return fitToButtons((0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_2__.splitArray)(editor.o.buttonsXS), editor);
37494
37533
  })();
37495
37534
  if (newStore.toString() !== store.toString()) {
37496
37535
  store = newStore;
@@ -37500,7 +37539,7 @@ const isButtonSeparator = (item)=>item === '|' || item === '---' || item === '\n
37500
37539
  }).on(editor.ow, 'load resize', ()=>editor.e.fire('recalcAdaptive'));
37501
37540
  }
37502
37541
  }
37503
- jodit_core_global__WEBPACK_IMPORTED_MODULE_0__.pluginSystem.add('mobile', mobile);
37542
+ jodit_core_global__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('mobile', mobile);
37504
37543
 
37505
37544
 
37506
37545
  /***/ }),
@@ -46379,25 +46418,20 @@ function __rewriteRelativeImportExtension(path, preserveJsx) {
46379
46418
  /******/ /* webpack/runtime/chunk loaded */
46380
46419
  /******/ !function() {
46381
46420
  /******/ var deferred = [];
46382
- /******/ __webpack_require__.O = function(result, chunkIds, fn, priority) {
46421
+ /******/ __webpack_require__.O = function(result, chunkIds, fn) {
46383
46422
  /******/ if(chunkIds) {
46384
- /******/ priority = priority || 0;
46385
- /******/ for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
46386
- /******/ deferred[i] = [chunkIds, fn, priority];
46423
+ /******/ deferred.push([chunkIds, fn]);
46387
46424
  /******/ return;
46388
46425
  /******/ }
46389
- /******/ var notFulfilled = Infinity;
46390
46426
  /******/ for (var i = 0; i < deferred.length; i++) {
46391
46427
  /******/ var chunkIds = deferred[i][0];
46392
46428
  /******/ var fn = deferred[i][1];
46393
- /******/ var priority = deferred[i][2];
46394
46429
  /******/ var fulfilled = true;
46395
46430
  /******/ for (var j = 0; j < chunkIds.length; j++) {
46396
- /******/ if (((priority & 1) === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {
46431
+ /******/ if (__webpack_require__.O.j(chunkIds[j])) {
46397
46432
  /******/ chunkIds.splice(j--, 1);
46398
46433
  /******/ } else {
46399
46434
  /******/ fulfilled = false;
46400
- /******/ if(priority < notFulfilled) notFulfilled = priority;
46401
46435
  /******/ }
46402
46436
  /******/ }
46403
46437
  /******/ if(fulfilled) {