jodit 4.12.41 → 4.12.44
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.
- package/CHANGELOG.md +16 -0
- package/es2015/jodit.css +1 -1
- package/es2015/jodit.fat.min.js +4 -4
- package/es2015/jodit.js +99 -6
- package/es2015/jodit.min.js +4 -4
- package/es2015/plugins/debug/debug.css +1 -1
- package/es2015/plugins/debug/debug.js +1 -1
- package/es2015/plugins/debug/debug.min.js +1 -1
- package/es2015/plugins/speech-recognize/speech-recognize.css +1 -1
- package/es2015/plugins/speech-recognize/speech-recognize.js +1 -1
- package/es2015/plugins/speech-recognize/speech-recognize.min.js +1 -1
- package/es2018/jodit.fat.min.js +4 -4
- package/es2018/jodit.min.js +4 -4
- package/es2018/plugins/debug/debug.min.js +1 -1
- package/es2018/plugins/speech-recognize/speech-recognize.min.js +1 -1
- package/es2021/jodit.css +1 -1
- package/es2021/jodit.fat.min.js +6 -6
- package/es2021/jodit.js +99 -6
- package/es2021/jodit.min.js +6 -6
- package/es2021/plugins/debug/debug.css +1 -1
- package/es2021/plugins/debug/debug.js +1 -1
- package/es2021/plugins/debug/debug.min.js +1 -1
- package/es2021/plugins/speech-recognize/speech-recognize.css +1 -1
- package/es2021/plugins/speech-recognize/speech-recognize.js +1 -1
- package/es2021/plugins/speech-recognize/speech-recognize.min.js +1 -1
- package/es2021.en/jodit.css +1 -1
- package/es2021.en/jodit.fat.min.js +6 -6
- package/es2021.en/jodit.js +99 -6
- package/es2021.en/jodit.min.js +7 -7
- package/es2021.en/plugins/debug/debug.css +1 -1
- package/es2021.en/plugins/debug/debug.js +1 -1
- package/es2021.en/plugins/debug/debug.min.js +1 -1
- package/es2021.en/plugins/speech-recognize/speech-recognize.css +1 -1
- package/es2021.en/plugins/speech-recognize/speech-recognize.js +1 -1
- package/es2021.en/plugins/speech-recognize/speech-recognize.min.js +1 -1
- package/es5/jodit.css +2 -2
- package/es5/jodit.fat.min.js +2 -2
- package/es5/jodit.js +99 -6
- package/es5/jodit.min.css +2 -2
- package/es5/jodit.min.js +2 -2
- package/es5/plugins/debug/debug.css +1 -1
- package/es5/plugins/debug/debug.js +1 -1
- package/es5/plugins/debug/debug.min.js +1 -1
- package/es5/plugins/speech-recognize/speech-recognize.css +1 -1
- package/es5/plugins/speech-recognize/speech-recognize.js +1 -1
- package/es5/plugins/speech-recognize/speech-recognize.min.js +1 -1
- package/es5/polyfills.fat.min.js +1 -1
- package/es5/polyfills.js +1 -1
- package/es5/polyfills.min.js +1 -1
- package/esm/config.d.ts +22 -0
- package/esm/config.js +21 -0
- package/esm/core/constants.js +1 -1
- package/esm/core/storage/async-storage.d.ts +2 -2
- package/esm/core/storage/async-storage.js +19 -1
- package/esm/core/storage/engines/local-storage-provider.js +6 -1
- package/esm/core/view/view.js +1 -1
- package/esm/plugins/clean-html/helpers/index.d.ts +1 -0
- package/esm/plugins/clean-html/helpers/index.js +1 -0
- package/esm/plugins/clean-html/helpers/is-allowed-media-embed.d.ts +15 -0
- package/esm/plugins/clean-html/helpers/is-allowed-media-embed.js +28 -0
- package/esm/plugins/clean-html/helpers/visitor/filters/sandbox-iframes-in-content.js +7 -0
- package/esm/plugins/clean-html/helpers/visitor/filters/try-remove-node.js +9 -1
- package/esm/types/storage.d.ts +15 -0
- package/esm/types/view.d.ts +8 -1
- package/package.json +1 -1
- package/types/config.d.ts +22 -0
- package/types/core/storage/async-storage.d.ts +2 -2
- package/types/plugins/clean-html/helpers/index.d.ts +1 -0
- package/types/plugins/clean-html/helpers/is-allowed-media-embed.d.ts +15 -0
- package/types/types/storage.d.ts +15 -0
- package/types/types/view.d.ts +8 -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.12.
|
|
4
|
+
* Version: v4.12.44
|
|
5
5
|
* Url: https://xdsoft.net/jodit/
|
|
6
6
|
* License(s): MIT
|
|
7
7
|
*/
|
|
@@ -378,6 +378,26 @@ let ConfigPrototype = {};
|
|
|
378
378
|
/**
|
|
379
379
|
* if set true, then the current mode is saved in a cookie, and is restored after a reload of the page
|
|
380
380
|
*/ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "saveModeInStorage", false);
|
|
381
|
+
/**
|
|
382
|
+
* Configure the provider that backs {@link IViewBased.asyncStorage}.
|
|
383
|
+
*
|
|
384
|
+
* By default the editor's `asyncStorage` uses persistent `IndexedDB` (with an
|
|
385
|
+
* in-memory fallback when it is unavailable). Set `defaultProvider` to override it:
|
|
386
|
+
* - `'local'` — persist in `localStorage`;
|
|
387
|
+
* - `'memory'` — keep everything in memory (nothing survives a reload);
|
|
388
|
+
* - a custom {@link IAsyncStorage} implementation — plug in your own backend.
|
|
389
|
+
*
|
|
390
|
+
* ```javascript
|
|
391
|
+
* Jodit.make('#editor', {
|
|
392
|
+
* asyncStorage: { defaultProvider: 'local' }
|
|
393
|
+
* });
|
|
394
|
+
*
|
|
395
|
+
* // or a fully custom backend
|
|
396
|
+
* Jodit.make('#editor', {
|
|
397
|
+
* asyncStorage: { defaultProvider: myAsyncStorage }
|
|
398
|
+
* });
|
|
399
|
+
* ```
|
|
400
|
+
*/ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "asyncStorage", {});
|
|
381
401
|
/**
|
|
382
402
|
* Class name that can be appended to the editable area
|
|
383
403
|
*
|
|
@@ -1829,7 +1849,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1829
1849
|
* ```
|
|
1830
1850
|
* @packageDocumentation
|
|
1831
1851
|
* @module constants
|
|
1832
|
-
*/ const APP_VERSION = "4.12.
|
|
1852
|
+
*/ const APP_VERSION = "4.12.44";
|
|
1833
1853
|
// prettier-ignore
|
|
1834
1854
|
const ES = "es2015";
|
|
1835
1855
|
const IS_ES_MODERN = true;
|
|
@@ -13099,9 +13119,23 @@ class AsyncStorage {
|
|
|
13099
13119
|
}
|
|
13100
13120
|
}).call(this);
|
|
13101
13121
|
}
|
|
13102
|
-
static makeStorage(persistentOrStrategy = false, suffix) {
|
|
13122
|
+
static makeStorage(persistentOrStrategy = false, suffix, options) {
|
|
13103
13123
|
let provider = undefined;
|
|
13104
13124
|
let storage = null;
|
|
13125
|
+
// An explicit `defaultProvider` overrides the strategy-based selection
|
|
13126
|
+
// below and decides which provider backs the storage.
|
|
13127
|
+
const defaultProvider = options === null || options === void 0 ? void 0 : options.defaultProvider;
|
|
13128
|
+
if (defaultProvider != null) {
|
|
13129
|
+
if (defaultProvider === 'local') {
|
|
13130
|
+
provider = (0,_engines_local_storage_provider__WEBPACK_IMPORTED_MODULE_4__.canUsePersistentStorage)('localStorage') ? new _engines_local_storage_provider__WEBPACK_IMPORTED_MODULE_4__.LocalStorageProvider(_storage__WEBPACK_IMPORTED_MODULE_6__.StorageKey + (suffix || '')) : new _engines_memory_storage_provider__WEBPACK_IMPORTED_MODULE_5__.MemoryStorageProvider();
|
|
13131
|
+
} else if (defaultProvider === 'memory') {
|
|
13132
|
+
provider = new _engines_memory_storage_provider__WEBPACK_IMPORTED_MODULE_5__.MemoryStorageProvider();
|
|
13133
|
+
} else {
|
|
13134
|
+
// A custom IAsyncStorage implementation, used as-is.
|
|
13135
|
+
provider = defaultProvider;
|
|
13136
|
+
}
|
|
13137
|
+
return new AsyncStorage(Promise.resolve(provider), suffix);
|
|
13138
|
+
}
|
|
13105
13139
|
if (persistentOrStrategy === 'localStorage' || persistentOrStrategy === 'sessionStorage') {
|
|
13106
13140
|
if ((0,_engines_local_storage_provider__WEBPACK_IMPORTED_MODULE_4__.canUsePersistentStorage)(persistentOrStrategy)) {
|
|
13107
13141
|
provider = new _engines_local_storage_provider__WEBPACK_IMPORTED_MODULE_4__.LocalStorageProvider(_storage__WEBPACK_IMPORTED_MODULE_6__.StorageKey + (suffix || ''), persistentOrStrategy);
|
|
@@ -13413,7 +13447,12 @@ function clearUseIndexedDBCache() {
|
|
|
13413
13447
|
}
|
|
13414
13448
|
delete(key) {
|
|
13415
13449
|
try {
|
|
13416
|
-
this.storage.
|
|
13450
|
+
const buffer = this.storage.getItem(this.rootKey);
|
|
13451
|
+
if (buffer) {
|
|
13452
|
+
const json = JSON.parse(buffer);
|
|
13453
|
+
delete json[key];
|
|
13454
|
+
this.storage.setItem(this.rootKey, JSON.stringify(json));
|
|
13455
|
+
}
|
|
13417
13456
|
} catch (unused) {}
|
|
13418
13457
|
return this;
|
|
13419
13458
|
}
|
|
@@ -16811,7 +16850,7 @@ class View extends jodit_core_component_component__WEBPACK_IMPORTED_MODULE_3__.C
|
|
|
16811
16850
|
/**
|
|
16812
16851
|
* Container for persistent set/get value
|
|
16813
16852
|
*/ get asyncStorage() {
|
|
16814
|
-
return jodit_core_storage_async_storage__WEBPACK_IMPORTED_MODULE_14__.AsyncStorage.makeStorage(true, this.id);
|
|
16853
|
+
return jodit_core_storage_async_storage__WEBPACK_IMPORTED_MODULE_14__.AsyncStorage.makeStorage(true, this.id, this.o.asyncStorage);
|
|
16815
16854
|
}
|
|
16816
16855
|
/**
|
|
16817
16856
|
* Short alias for `create`
|
|
@@ -28035,6 +28074,43 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_0__.Icon.set('eraser', (_eraser_svg_
|
|
|
28035
28074
|
|
|
28036
28075
|
|
|
28037
28076
|
|
|
28077
|
+
|
|
28078
|
+
/***/ }),
|
|
28079
|
+
|
|
28080
|
+
/***/ 28665:
|
|
28081
|
+
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
28082
|
+
|
|
28083
|
+
"use strict";
|
|
28084
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
28085
|
+
/* harmony export */ isAllowedMediaEmbed: function() { return /* binding */ isAllowedMediaEmbed; }
|
|
28086
|
+
/* harmony export */ });
|
|
28087
|
+
/*!
|
|
28088
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
28089
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
28090
|
+
* Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
|
|
28091
|
+
*/ /**
|
|
28092
|
+
* @module plugins/clean-html
|
|
28093
|
+
*/ // The embed URLs produced by the built-in Video button (see
|
|
28094
|
+
// `convertMediaUrlToVideoEmbed`): `//www.youtube.com/embed/<id>` and
|
|
28095
|
+
// `//player.vimeo.com/video/<id>`. `youtube-nocookie.com` is the privacy
|
|
28096
|
+
// variant YouTube offers for the same `/embed/` player. The `/embed/` and
|
|
28097
|
+
// `/video/` path prefixes are required so a bare provider link
|
|
28098
|
+
// (`youtube.com/@somebody`) is not treated as a player.
|
|
28099
|
+
const YOUTUBE_EMBED = /^(https?:)?\/\/(www\.|m\.|music\.)?youtube(-nocookie)?\.com\/embed\//i;
|
|
28100
|
+
const VIMEO_EMBED = /^(https?:)?\/\/player\.vimeo\.com\/video\//i;
|
|
28101
|
+
/**
|
|
28102
|
+
* Whether an `<iframe>` `src` points at a recognized YouTube/Vimeo video
|
|
28103
|
+
* player. Such iframes are inserted intentionally through the Video button, so
|
|
28104
|
+
* clean-html must not strip them (`denyTags` includes `iframe` by default) or
|
|
28105
|
+
* neutralize them with an empty `sandbox=""` (#1381). Arbitrary/bare iframes
|
|
28106
|
+
* are still removed.
|
|
28107
|
+
*
|
|
28108
|
+
* @private
|
|
28109
|
+
*/ function isAllowedMediaEmbed(src) {
|
|
28110
|
+
return YOUTUBE_EMBED.test(src) || VIMEO_EMBED.test(src);
|
|
28111
|
+
}
|
|
28112
|
+
|
|
28113
|
+
|
|
28038
28114
|
/***/ }),
|
|
28039
28115
|
|
|
28040
28116
|
/***/ 37431:
|
|
@@ -28523,6 +28599,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
28523
28599
|
/* harmony export */ });
|
|
28524
28600
|
/* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(23211);
|
|
28525
28601
|
/* harmony import */ var jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7909);
|
|
28602
|
+
/* harmony import */ var _is_allowed_media_embed__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28665);
|
|
28526
28603
|
/*!
|
|
28527
28604
|
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
28528
28605
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
@@ -28531,6 +28608,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
28531
28608
|
* @module plugins/clean-html
|
|
28532
28609
|
*/
|
|
28533
28610
|
|
|
28611
|
+
|
|
28534
28612
|
/**
|
|
28535
28613
|
* Add `sandbox=""` attribute to all `<iframe>` elements in the editor content
|
|
28536
28614
|
* @private
|
|
@@ -28539,6 +28617,12 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
28539
28617
|
return hadEffect;
|
|
28540
28618
|
}
|
|
28541
28619
|
const elm = nodeElm;
|
|
28620
|
+
// A trusted YouTube/Vimeo player (inserted via the Video button) must not
|
|
28621
|
+
// get an empty `sandbox=""` — that blocks scripts and stops playback. It
|
|
28622
|
+
// is served in its own third-party origin, so leave it as-is (#1381).
|
|
28623
|
+
if ((0,_is_allowed_media_embed__WEBPACK_IMPORTED_MODULE_2__.isAllowedMediaEmbed)((0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'src') || '')) {
|
|
28624
|
+
return hadEffect;
|
|
28625
|
+
}
|
|
28542
28626
|
if (!elm.hasAttribute('sandbox')) {
|
|
28543
28627
|
(0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'sandbox', '');
|
|
28544
28628
|
return true;
|
|
@@ -28675,6 +28759,8 @@ function filterStyleProperties(style, allowed) {
|
|
|
28675
28759
|
/* harmony import */ var jodit_core_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(81937);
|
|
28676
28760
|
/* harmony import */ var jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23211);
|
|
28677
28761
|
/* harmony import */ var jodit_core_helpers_string_trim__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4040);
|
|
28762
|
+
/* harmony import */ var jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(7909);
|
|
28763
|
+
/* harmony import */ var _is_allowed_media_embed__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(28665);
|
|
28678
28764
|
/*!
|
|
28679
28765
|
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
28680
28766
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
@@ -28684,6 +28770,8 @@ function filterStyleProperties(style, allowed) {
|
|
|
28684
28770
|
*/
|
|
28685
28771
|
|
|
28686
28772
|
|
|
28773
|
+
|
|
28774
|
+
|
|
28687
28775
|
/**
|
|
28688
28776
|
* @private
|
|
28689
28777
|
*/ function tryRemoveNode(jodit, nodeElm, hadEffect, allowTags, denyTags, currentSelectionNode) {
|
|
@@ -28700,7 +28788,12 @@ function filterStyleProperties(style, allowed) {
|
|
|
28700
28788
|
if (allow && !allow[node.nodeName]) {
|
|
28701
28789
|
return true;
|
|
28702
28790
|
}
|
|
28703
|
-
|
|
28791
|
+
// A YouTube/Vimeo player inserted through the Video button is trusted
|
|
28792
|
+
// editor content, so keep it even though `iframe` is denied by default
|
|
28793
|
+
// — otherwise the embed is stripped ~300ms after insertion (#1381).
|
|
28794
|
+
// Arbitrary/bare iframes stay denied.
|
|
28795
|
+
const isTrustedEmbed = node.nodeName === 'IFRAME' && (0,_is_allowed_media_embed__WEBPACK_IMPORTED_MODULE_4__.isAllowedMediaEmbed)((0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_3__.attr)(node, 'src') || '');
|
|
28796
|
+
if (!allow && deny && deny[node.nodeName] && !isTrustedEmbed) {
|
|
28704
28797
|
return true;
|
|
28705
28798
|
}
|
|
28706
28799
|
}
|