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/es2021.en/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
|
*/
|
|
@@ -1843,7 +1843,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1843
1843
|
* ```
|
|
1844
1844
|
* @packageDocumentation
|
|
1845
1845
|
* @module constants
|
|
1846
|
-
*/ const APP_VERSION = "4.13.
|
|
1846
|
+
*/ const APP_VERSION = "4.13.26";
|
|
1847
1847
|
// prettier-ignore
|
|
1848
1848
|
const ES = "es2021";
|
|
1849
1849
|
const IS_ES_MODERN = true;
|
|
@@ -2441,20 +2441,41 @@ class Create {
|
|
|
2441
2441
|
return value;
|
|
2442
2442
|
};
|
|
2443
2443
|
}
|
|
2444
|
+
function getOwnerDocument(component) {
|
|
2445
|
+
const od = component.od;
|
|
2446
|
+
return od ?? document;
|
|
2447
|
+
}
|
|
2444
2448
|
function cacheHTML(target, _, descriptor) {
|
|
2445
2449
|
const fn = descriptor.value;
|
|
2446
2450
|
if (!(0,jodit_core_helpers_checker__WEBPACK_IMPORTED_MODULE_2__.isFunction)(fn)) {
|
|
2447
2451
|
throw (0,jodit_core_helpers_utils_error_error__WEBPACK_IMPORTED_MODULE_3__.error)('Handler must be a Function');
|
|
2448
2452
|
}
|
|
2449
2453
|
let useCache = true;
|
|
2450
|
-
|
|
2454
|
+
/**
|
|
2455
|
+
* The cache is keyed by the owner document first and only then by the
|
|
2456
|
+
* component class. A page can create editors inside different documents
|
|
2457
|
+
* (iframes) and destroy those documents later: a template cached from a
|
|
2458
|
+
* dead document would otherwise be cloned for every subsequent editor,
|
|
2459
|
+
* whose buttons then never react to clicks.
|
|
2460
|
+
*/ const cached = new WeakMap();
|
|
2451
2461
|
descriptor.value = function(...attrs) {
|
|
2452
|
-
|
|
2453
|
-
|
|
2462
|
+
const doc = getOwnerDocument(this);
|
|
2463
|
+
const docCache = cached.get(doc);
|
|
2464
|
+
if (useCache && docCache?.has(this.constructor)) {
|
|
2465
|
+
return docCache.get(this.constructor)?.cloneNode(true);
|
|
2454
2466
|
}
|
|
2455
2467
|
const value = fn.apply(this, attrs);
|
|
2456
2468
|
if (useCache && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(value)) {
|
|
2457
|
-
|
|
2469
|
+
if (docCache) {
|
|
2470
|
+
docCache.set(this.constructor, value);
|
|
2471
|
+
} else {
|
|
2472
|
+
cached.set(doc, new WeakMap([
|
|
2473
|
+
[
|
|
2474
|
+
this.constructor,
|
|
2475
|
+
value
|
|
2476
|
+
]
|
|
2477
|
+
]));
|
|
2478
|
+
}
|
|
2458
2479
|
}
|
|
2459
2480
|
return useCache ? value.cloneNode(true) : value;
|
|
2460
2481
|
};
|
|
@@ -16444,6 +16465,15 @@ class Popup extends jodit_core_ui_group_group__WEBPACK_IMPORTED_MODULE_9__.UIGro
|
|
|
16444
16465
|
this.j.e.fire(this, 'beforeClose');
|
|
16445
16466
|
this.j.e.fire('beforePopupClose', this);
|
|
16446
16467
|
this.__removeGlobalListeners();
|
|
16468
|
+
// Blur a focused control (e.g. the color picker hex input) before
|
|
16469
|
+
// the container goes away. Chrome fires `blur`/`change` for a
|
|
16470
|
+
// removed focused element in the middle of `removeChild`, Firefox
|
|
16471
|
+
// does not fire them at all. Blurring first makes both browsers
|
|
16472
|
+
// run those handlers while the popup is still in the DOM. See #1458
|
|
16473
|
+
const { activeElement } = this.od;
|
|
16474
|
+
if (activeElement && activeElement !== this.container && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_4__.Dom.isOrContains(this.container, activeElement) && (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_6__.isFunction)(activeElement.blur)) {
|
|
16475
|
+
activeElement.blur();
|
|
16476
|
+
}
|
|
16447
16477
|
jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_4__.Dom.safeRemove(this.container);
|
|
16448
16478
|
return this;
|
|
16449
16479
|
}
|
|
@@ -24050,15 +24080,23 @@ class ToolbarButton extends jodit_core_ui_button__WEBPACK_IMPORTED_MODULE_19__.U
|
|
|
24050
24080
|
return this.openedPopup;
|
|
24051
24081
|
}
|
|
24052
24082
|
__closePopup() {
|
|
24053
|
-
|
|
24054
|
-
|
|
24055
|
-
|
|
24056
|
-
|
|
24057
|
-
|
|
24058
|
-
|
|
24059
|
-
|
|
24060
|
-
|
|
24061
|
-
|
|
24083
|
+
const popup = this.openedPopup;
|
|
24084
|
+
if (!popup) {
|
|
24085
|
+
return;
|
|
24086
|
+
}
|
|
24087
|
+
// Detach first: removing a popup that holds the focused element
|
|
24088
|
+
// makes Chrome fire `blur`/`change` on it synchronously, and a
|
|
24089
|
+
// handler there may call the popup's `close` callback again.
|
|
24090
|
+
// A re-entrant call must be a no-op, otherwise it destructs the
|
|
24091
|
+
// popup while the outer `removeChild` is still running and Chrome
|
|
24092
|
+
// throws NotFoundError. See #1458
|
|
24093
|
+
this.openedPopup = null;
|
|
24094
|
+
this.j.e.off(this.ow, 'mousedown touchstart', this.onOutsideClick).off('escape closeAllPopups', this.onOutsideClick);
|
|
24095
|
+
this.state.activated = false;
|
|
24096
|
+
popup.close();
|
|
24097
|
+
popup.destruct();
|
|
24098
|
+
if (this.trigger) {
|
|
24099
|
+
(0,jodit_core_helpers_utils_attr__WEBPACK_IMPORTED_MODULE_17__.attr)(this.trigger, 'aria-expanded', false);
|
|
24062
24100
|
}
|
|
24063
24101
|
}
|
|
24064
24102
|
/**
|
|
@@ -25405,8 +25443,15 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
|
|
|
25405
25443
|
const { extra } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
|
|
25406
25444
|
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>`));
|
|
25407
25445
|
const { hexInput } = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.refs)(form);
|
|
25446
|
+
// Enter applies the value and closes the popup; removing the focused
|
|
25447
|
+
// input then makes Chrome fire `change` on it, which would apply the
|
|
25448
|
+
// same color a second time and toggle it off again. See #1459
|
|
25449
|
+
let appliedHexValue = null;
|
|
25408
25450
|
const applyHexInput = ()=>{
|
|
25409
25451
|
const raw = hexInput.value.trim();
|
|
25452
|
+
if (raw === appliedHexValue) {
|
|
25453
|
+
return;
|
|
25454
|
+
}
|
|
25410
25455
|
const isHex = /^#?[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(raw);
|
|
25411
25456
|
const isRgb = /^rgba?\([\d\s.,%]+\)$/i.test(raw);
|
|
25412
25457
|
if (!isHex && !isRgb) {
|
|
@@ -25414,6 +25459,7 @@ jodit_core_ui__WEBPACK_IMPORTED_MODULE_2__.Icon.set('palette', (_palette_svg__WE
|
|
|
25414
25459
|
}
|
|
25415
25460
|
const color = (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.normalizeColor)(isHex && !raw.startsWith('#') ? '#' + raw : raw);
|
|
25416
25461
|
if (color && (0,jodit_core_helpers___WEBPACK_IMPORTED_MODULE_1__.isFunction)(callback)) {
|
|
25462
|
+
appliedHexValue = raw;
|
|
25417
25463
|
callback(color);
|
|
25418
25464
|
}
|
|
25419
25465
|
};
|