jodit 4.13.24 → 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.
- package/CHANGELOG.md +13 -0
- package/es2015/jodit.css +1 -1
- package/es2015/jodit.fat.min.js +4 -4
- package/es2015/jodit.js +62 -16
- 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 +4 -4
- package/es2021/jodit.js +61 -15
- package/es2021/jodit.min.js +4 -4
- 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 +4 -4
- package/es2021.en/jodit.js +61 -15
- package/es2021.en/jodit.min.js +25 -25
- 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 +62 -16
- 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/core/constants.js +1 -1
- package/esm/core/decorators/cache/cache.js +21 -3
- package/esm/core/ui/popup/popup.js +13 -1
- package/esm/modules/toolbar/button/button.js +19 -11
- package/esm/modules/widget/color-picker/color-picker.js +8 -0
- 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.
|
|
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.
|
|
1852
|
+
*/ const APP_VERSION = "4.13.26";
|
|
1853
1853
|
// prettier-ignore
|
|
1854
1854
|
const ES = "es2015";
|
|
1855
1855
|
const IS_ES_MODERN = true;
|
|
@@ -2448,21 +2448,42 @@ class Create {
|
|
|
2448
2448
|
return value;
|
|
2449
2449
|
};
|
|
2450
2450
|
}
|
|
2451
|
+
function getOwnerDocument(component) {
|
|
2452
|
+
const od = component.od;
|
|
2453
|
+
return od !== null && od !== void 0 ? od : document;
|
|
2454
|
+
}
|
|
2451
2455
|
function cacheHTML(target, _, descriptor) {
|
|
2452
2456
|
const fn = descriptor.value;
|
|
2453
2457
|
if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_2__.isFunction)(fn)) {
|
|
2454
2458
|
throw (0,jodit_core_helpers_utils_error_error__WEBPACK_IMPORTED_MODULE_3__.error)('Handler must be a Function');
|
|
2455
2459
|
}
|
|
2456
2460
|
let useCache = true;
|
|
2457
|
-
|
|
2461
|
+
/**
|
|
2462
|
+
* The cache is keyed by the owner document first and only then by the
|
|
2463
|
+
* component class. A page can create editors inside different documents
|
|
2464
|
+
* (iframes) and destroy those documents later: a template cached from a
|
|
2465
|
+
* dead document would otherwise be cloned for every subsequent editor,
|
|
2466
|
+
* whose buttons then never react to clicks.
|
|
2467
|
+
*/ const cached = new WeakMap();
|
|
2458
2468
|
descriptor.value = function(...attrs) {
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2469
|
+
const doc = getOwnerDocument(this);
|
|
2470
|
+
const docCache = cached.get(doc);
|
|
2471
|
+
if (useCache && (docCache === null || docCache === void 0 ? void 0 : docCache.has(this.constructor))) {
|
|
2472
|
+
var _docCache_get;
|
|
2473
|
+
return (_docCache_get = docCache.get(this.constructor)) === null || _docCache_get === void 0 ? void 0 : _docCache_get.cloneNode(true);
|
|
2462
2474
|
}
|
|
2463
2475
|
const value = fn.apply(this, attrs);
|
|
2464
2476
|
if (useCache && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(value)) {
|
|
2465
|
-
|
|
2477
|
+
if (docCache) {
|
|
2478
|
+
docCache.set(this.constructor, value);
|
|
2479
|
+
} else {
|
|
2480
|
+
cached.set(doc, new WeakMap([
|
|
2481
|
+
[
|
|
2482
|
+
this.constructor,
|
|
2483
|
+
value
|
|
2484
|
+
]
|
|
2485
|
+
]));
|
|
2486
|
+
}
|
|
2466
2487
|
}
|
|
2467
2488
|
return useCache ? value.cloneNode(true) : value;
|
|
2468
2489
|
};
|
|
@@ -16574,6 +16595,15 @@ class Popup extends jodit_core_ui_group_group__WEBPACK_IMPORTED_MODULE_11__.UIGr
|
|
|
16574
16595
|
this.j.e.fire(this, 'beforeClose');
|
|
16575
16596
|
this.j.e.fire('beforePopupClose', this);
|
|
16576
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
|
+
}
|
|
16577
16607
|
jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_6__.Dom.safeRemove(this.container);
|
|
16578
16608
|
return this;
|
|
16579
16609
|
}
|
|
@@ -24263,15 +24293,23 @@ class ToolbarButton extends jodit_core_ui_button__WEBPACK_IMPORTED_MODULE_21__.U
|
|
|
24263
24293
|
return this.openedPopup;
|
|
24264
24294
|
}
|
|
24265
24295
|
__closePopup() {
|
|
24266
|
-
|
|
24267
|
-
|
|
24268
|
-
|
|
24269
|
-
|
|
24270
|
-
|
|
24271
|
-
|
|
24272
|
-
|
|
24273
|
-
|
|
24274
|
-
|
|
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);
|
|
24275
24313
|
}
|
|
24276
24314
|
}
|
|
24277
24315
|
/**
|
|
@@ -25625,8 +25663,15 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
|
|
|
25625
25663
|
const { extra } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
|
|
25626
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>`));
|
|
25627
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;
|
|
25628
25670
|
const applyHexInput = ()=>{
|
|
25629
25671
|
const raw = hexInput.value.trim();
|
|
25672
|
+
if (raw === appliedHexValue) {
|
|
25673
|
+
return;
|
|
25674
|
+
}
|
|
25630
25675
|
const isHex = /^#?[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(raw);
|
|
25631
25676
|
const isRgb = /^rgba?\([\d\s.,%]+\)$/i.test(raw);
|
|
25632
25677
|
if (!isHex && !isRgb) {
|
|
@@ -25634,6 +25679,7 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
|
|
|
25634
25679
|
}
|
|
25635
25680
|
const color = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(isHex && !raw.startsWith('#') ? '#' + raw : raw);
|
|
25636
25681
|
if (color && (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.isFunction)(callback)) {
|
|
25682
|
+
appliedHexValue = raw;
|
|
25637
25683
|
callback(color);
|
|
25638
25684
|
}
|
|
25639
25685
|
};
|