jodit 4.15.5 → 4.15.7
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 +73 -8
- 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 +72 -8
- 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 +72 -8
- package/es2021.en/jodit.min.js +4 -4
- 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 +114 -42
- 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 +10 -0
- package/esm/core/constants.js +1 -1
- package/esm/plugins/clean-html/clean-html.d.ts +7 -3
- package/esm/plugins/clean-html/clean-html.js +37 -0
- package/esm/plugins/clean-html/config.d.ts +10 -0
- package/esm/plugins/clean-html/config.js +1 -0
- package/esm/plugins/drag-and-drop-element/drag-and-drop-element.d.ts +1 -0
- package/esm/plugins/drag-and-drop-element/drag-and-drop-element.js +19 -4
- package/esm/plugins/link/link.js +9 -0
- package/package.json +1 -1
- package/types/config.d.ts +10 -0
- package/types/plugins/clean-html/clean-html.d.ts +7 -3
- package/types/plugins/clean-html/config.d.ts +10 -0
- package/types/plugins/drag-and-drop-element/drag-and-drop-element.d.ts +1 -0
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.15.
|
|
4
|
+
* Version: v4.15.7
|
|
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.
|
|
1782
|
+
*/ const APP_VERSION = "4.15.7";
|
|
1783
1783
|
// prettier-ignore
|
|
1784
1784
|
const ES = "es2021";
|
|
1785
1785
|
const IS_ES_MODERN = true;
|
|
@@ -28255,7 +28255,8 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_5__.Icon.set('class-span', (_class_s
|
|
|
28255
28255
|
|
|
28256
28256
|
/**
|
|
28257
28257
|
* Clean HTML after removeFormat and insertHorizontalRule command
|
|
28258
|
-
*/
|
|
28258
|
+
*/ const TRAILING_BR_BLOCKS = 'p, div, li, td, th, h1, h2, h3, h4, h5, h6, blockquote';
|
|
28259
|
+
class cleanHtml extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_7__.Plugin {
|
|
28259
28260
|
/** @override */ afterInit(jodit) {}
|
|
28260
28261
|
get isEditMode() {
|
|
28261
28262
|
return !(this.j.isInDestruct || !this.j.isEditorMode() || this.j.getReadOnly());
|
|
@@ -28314,6 +28315,7 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_5__.Icon.set('class-span', (_class_s
|
|
|
28314
28315
|
* opt-in via `cleanHTML.collapseEmptyValueToEmptyString`. See #1149
|
|
28315
28316
|
*/ onAfterGetValueFromEditor(data) {
|
|
28316
28317
|
this.__singleQuotesInFontFamily(data);
|
|
28318
|
+
this.__removeTrailingBr(data);
|
|
28317
28319
|
if (!this.j.o.cleanHTML.collapseEmptyValueToEmptyString) {
|
|
28318
28320
|
return;
|
|
28319
28321
|
}
|
|
@@ -28328,7 +28330,38 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_5__.Icon.set('class-span', (_class_s
|
|
|
28328
28330
|
* `style="font-family: "Open Sans", …"` — broken markup. Single quotes
|
|
28329
28331
|
* survive that round trip. Names that already contain an apostrophe are
|
|
28330
28332
|
* left alone.
|
|
28331
|
-
*/
|
|
28333
|
+
*/ /**
|
|
28334
|
+
* Drop a `<br>` that is the last node of a block (or of the value) and
|
|
28335
|
+
* follows other content — the caret placeholder browsers leave behind
|
|
28336
|
+
* after typing into an empty block. An empty block (`<p><br></p>`) and a
|
|
28337
|
+
* deliberate empty line (`text<br><br>`) are kept.
|
|
28338
|
+
*/ __removeTrailingBr(data) {
|
|
28339
|
+
if (!this.j.o.cleanHTML.removeTrailingBr || !/<br/i.test(data.value)) {
|
|
28340
|
+
return;
|
|
28341
|
+
}
|
|
28342
|
+
const box = this.j.c.div();
|
|
28343
|
+
box.innerHTML = data.value;
|
|
28344
|
+
const blocks = [
|
|
28345
|
+
box,
|
|
28346
|
+
...box.querySelectorAll(TRAILING_BR_BLOCKS)
|
|
28347
|
+
];
|
|
28348
|
+
blocks.forEach((block)=>{
|
|
28349
|
+
const last = block.lastChild;
|
|
28350
|
+
if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(last, 'br')) {
|
|
28351
|
+
return;
|
|
28352
|
+
}
|
|
28353
|
+
const prev = last.previousSibling;
|
|
28354
|
+
if (!prev || jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isTag(prev, 'br')) {
|
|
28355
|
+
return;
|
|
28356
|
+
}
|
|
28357
|
+
if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isText(prev) && !prev.nodeValue?.trim() && !prev.previousSibling) {
|
|
28358
|
+
return;
|
|
28359
|
+
}
|
|
28360
|
+
jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.safeRemove(last);
|
|
28361
|
+
});
|
|
28362
|
+
data.value = box.innerHTML;
|
|
28363
|
+
}
|
|
28364
|
+
__singleQuotesInFontFamily(data) {
|
|
28332
28365
|
if (!this.j.o.cleanHTML.singleQuotesInFontFamily || !data.value.includes('"')) {
|
|
28333
28366
|
return;
|
|
28334
28367
|
}
|
|
@@ -28415,6 +28448,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.cleanHTML = {
|
|
|
28415
28448
|
fillEmptyParagraph: true,
|
|
28416
28449
|
collapseEmptyValueToEmptyString: false,
|
|
28417
28450
|
singleQuotesInFontFamily: true,
|
|
28451
|
+
removeTrailingBr: false,
|
|
28418
28452
|
replaceNBSP: true,
|
|
28419
28453
|
replaceOldTags: {
|
|
28420
28454
|
i: 'em',
|
|
@@ -30197,6 +30231,11 @@ var DragState = /*#__PURE__*/ (/* unused pure expression or super */ null && (fu
|
|
|
30197
30231
|
this.state = 2;
|
|
30198
30232
|
}
|
|
30199
30233
|
this.j.e.fire('hidePopup hideResizer');
|
|
30234
|
+
// The ghost lives in the top document (position: fixed), but the
|
|
30235
|
+
// mousemove comes from the editor document. In iframe mode those are
|
|
30236
|
+
// different viewports, so the iframe's own offset has to be added or
|
|
30237
|
+
// the ghost trails the pointer by exactly that distance (#1455).
|
|
30238
|
+
const offset = this.__ghostOffset();
|
|
30200
30239
|
if (!this.draggable.parentNode) {
|
|
30201
30240
|
const target = (0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_5__.dataBind)(this.draggable, 'target');
|
|
30202
30241
|
(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_5__.css)(this.draggable, {
|
|
@@ -30206,19 +30245,35 @@ var DragState = /*#__PURE__*/ (/* unused pure expression or super */ null && (fu
|
|
|
30206
30245
|
position: 'fixed',
|
|
30207
30246
|
opacity: 0.7,
|
|
30208
30247
|
display: 'inline-block',
|
|
30209
|
-
left: event.clientX,
|
|
30210
|
-
top: event.clientY,
|
|
30248
|
+
left: event.clientX + offset.left,
|
|
30249
|
+
top: event.clientY + offset.top,
|
|
30211
30250
|
width: target?.offsetWidth ?? 100,
|
|
30212
30251
|
height: target?.offsetHeight ?? 100
|
|
30213
30252
|
});
|
|
30214
30253
|
jodit_core_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.append((0,jodit_core_global__WEBPACK_IMPORTED_MODULE_4__.getContainer)(this.j, dragAndDropElement), this.draggable);
|
|
30215
30254
|
}
|
|
30216
30255
|
;(0,jodit_core_helpers__WEBPACK_IMPORTED_MODULE_5__.css)(this.draggable, {
|
|
30217
|
-
left: event.clientX,
|
|
30218
|
-
top: event.clientY
|
|
30256
|
+
left: event.clientX + offset.left,
|
|
30257
|
+
top: event.clientY + offset.top
|
|
30219
30258
|
});
|
|
30259
|
+
// The caret goes into the editor document, so it keeps the raw
|
|
30260
|
+
// (iframe-relative) coordinates.
|
|
30220
30261
|
this.j.s.insertCursorAtPoint(event.clientX, event.clientY);
|
|
30221
30262
|
}
|
|
30263
|
+
__ghostOffset() {
|
|
30264
|
+
const iframe = this.j.iframe;
|
|
30265
|
+
if (!iframe) {
|
|
30266
|
+
return {
|
|
30267
|
+
left: 0,
|
|
30268
|
+
top: 0
|
|
30269
|
+
};
|
|
30270
|
+
}
|
|
30271
|
+
const rect = iframe.getBoundingClientRect();
|
|
30272
|
+
return {
|
|
30273
|
+
left: rect.left,
|
|
30274
|
+
top: rect.top
|
|
30275
|
+
};
|
|
30276
|
+
}
|
|
30222
30277
|
/**
|
|
30223
30278
|
* Mouseup handler in any place
|
|
30224
30279
|
*/ onDragEnd() {
|
|
@@ -35997,6 +36052,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
|
|
|
35997
36052
|
jodit.history.snapshot.restore(snapshot);
|
|
35998
36053
|
const textWasChanged = getSelectionText() !== content_input.value.trim();
|
|
35999
36054
|
const ci = jodit.createInside;
|
|
36055
|
+
let caretAfter = null;
|
|
36000
36056
|
if (!link || !jodit_core_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isOrContains(jodit.editor, link)) {
|
|
36001
36057
|
if (!jodit.s.isCollapsed()) {
|
|
36002
36058
|
const node = jodit.s.current();
|
|
@@ -36013,6 +36069,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
|
|
|
36013
36069
|
links = [
|
|
36014
36070
|
a
|
|
36015
36071
|
];
|
|
36072
|
+
caretAfter = a;
|
|
36016
36073
|
}
|
|
36017
36074
|
links.forEach((link)=>jodit.s.select(link));
|
|
36018
36075
|
} else {
|
|
@@ -36045,6 +36102,13 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
|
|
|
36045
36102
|
}
|
|
36046
36103
|
jodit.e.fire('applyLink', jodit, a, form);
|
|
36047
36104
|
});
|
|
36105
|
+
// A brand-new link inserted at a collapsed caret used to stay
|
|
36106
|
+
// *selected*. Safari does not paint that selection, so the next
|
|
36107
|
+
// Enter silently replaced the link instead of starting a new line.
|
|
36108
|
+
// Put the caret right after the link instead.
|
|
36109
|
+
if (caretAfter) {
|
|
36110
|
+
jodit.s.setCursorAfter(caretAfter);
|
|
36111
|
+
}
|
|
36048
36112
|
jodit.synchronizeValues();
|
|
36049
36113
|
close();
|
|
36050
36114
|
return false;
|