jodit 3.9.6 → 3.11.2
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/.idea/dictionaries/v_chupurnov.xml +1 -0
- package/.idea/workspace.xml +197 -179
- package/CHANGELOG.MD +279 -133
- package/build/jodit.css +185 -130
- package/build/jodit.es2018.css +175 -126
- package/build/jodit.es2018.en.css +175 -126
- package/build/jodit.es2018.en.js +709 -367
- package/build/jodit.es2018.en.min.css +1 -1
- package/build/jodit.es2018.en.min.js +1 -1
- package/build/jodit.es2018.js +709 -367
- package/build/jodit.es2018.min.css +1 -1
- package/build/jodit.es2018.min.js +1 -1
- package/build/jodit.js +1362 -900
- package/build/jodit.min.css +2 -2
- package/build/jodit.min.js +1 -1
- package/package.json +22 -11
- package/src/core/async.ts +4 -0
- package/src/core/component/statuses.ts +6 -6
- package/src/core/dom.ts +25 -5
- package/src/core/events/event-emitter.ts +4 -2
- package/src/core/global.ts +15 -4
- package/src/core/helpers/append-script.ts +14 -0
- package/src/core/helpers/selector.ts +8 -3
- package/src/core/request/ajax.ts +5 -2
- package/src/core/request/response.ts +8 -4
- package/src/core/selection/style/api/toggle/toggle-css.ts +1 -1
- package/src/core/ui/button/button/button.less +8 -8
- package/src/core/ui/button/button/button.ts +9 -9
- package/src/core/ui/button/group/group.ts +2 -2
- package/src/core/ui/element.ts +4 -3
- package/src/core/ui/form/block/block.ts +1 -1
- package/src/core/ui/form/form.ts +8 -0
- package/src/core/ui/form/inputs/area/area.less +5 -0
- package/src/core/ui/form/inputs/area/area.ts +22 -1
- package/src/core/ui/form/inputs/checkbox/checkbox.less +50 -0
- package/src/core/ui/form/inputs/checkbox/checkbox.ts +48 -4
- package/src/core/ui/form/inputs/input/input.less +1 -1
- package/src/core/ui/form/inputs/input/input.ts +14 -4
- package/src/core/ui/icon.ts +2 -1
- package/src/core/ui/list/group.ts +2 -2
- package/src/core/ui/popup/popup.ts +59 -3
- package/src/jodit.ts +17 -14
- package/src/modules/dialog/dialog.less +0 -1
- package/src/modules/dialog/dialog.ts +2 -2
- package/src/modules/toolbar/collection/collection.ts +1 -6
- package/src/modules/toolbar/collection/editor-collection.ts +5 -1
- package/src/modules/widget/file-selector/file-selector.ts +1 -1
- package/src/modules/widget/tabs/tabs.less +1 -1
- package/src/modules/widget/tabs/tabs.ts +5 -3
- package/src/plugins/add-new-line/add-new-line.ts +1 -0
- package/src/plugins/clipboard/paste/paste.ts +1 -1
- package/src/plugins/image/image-properties/image-properties.ts +7 -0
- package/src/plugins/index.ts +1 -1
- package/src/plugins/keyboard/backspace/backspace.ts +183 -0
- package/src/plugins/keyboard/backspace/cases/check-join-neighbors.ts +117 -0
- package/src/plugins/keyboard/backspace/cases/check-join-two-lists.ts +55 -0
- package/src/plugins/keyboard/backspace/cases/check-not-collapsed.ts +27 -0
- package/src/plugins/keyboard/backspace/cases/check-remove-char.ts +191 -0
- package/src/plugins/keyboard/backspace/cases/check-remove-content-not-editable.ts +46 -0
- package/src/plugins/keyboard/backspace/cases/check-remove-empty-neighbor.ts +43 -0
- package/src/plugins/keyboard/backspace/cases/check-remove-empty-parent.ts +80 -0
- package/src/plugins/keyboard/backspace/cases/check-remove-unbreakable-element.ts +46 -0
- package/src/plugins/keyboard/backspace/cases/check-table-cell.ts +30 -0
- package/src/plugins/keyboard/backspace/cases/check-unwrap-first-list-item.ts +57 -0
- package/src/plugins/keyboard/backspace/cases/index.ts +27 -0
- package/src/plugins/keyboard/backspace/config.ts +33 -0
- package/src/plugins/keyboard/backspace/interface.d.ts +7 -0
- package/src/plugins/keyboard/helpers.ts +7 -3
- package/src/plugins/link/template.ts +2 -2
- package/src/plugins/print/preview.ts +103 -55
- package/src/plugins/resizer/resizer.ts +7 -2
- package/src/plugins/select.ts +0 -1
- package/src/plugins/source/const.ts +7 -0
- package/src/plugins/source/editor/engines/ace.ts +5 -0
- package/src/plugins/source/source.ts +19 -7
- package/src/styles/jodit.less +6 -0
- package/src/types/ajax.d.ts +3 -0
- package/src/types/async.d.ts +2 -0
- package/src/types/jodit.d.ts +5 -8
- package/src/types/popup.d.ts +1 -0
- package/src/types/ui.d.ts +23 -4
- package/types/core/async.d.ts +1 -0
- package/types/core/component/component.d.ts +6 -2
- package/types/core/component/statuses.d.ts +6 -6
- package/types/core/dom.d.ts +6 -2
- package/types/core/global.d.ts +1 -1
- package/types/core/helpers/append-script.d.ts +1 -0
- package/types/core/helpers/selector.d.ts +2 -3
- package/types/core/request/response.d.ts +2 -1
- package/types/core/ui/button/button/button.d.ts +3 -3
- package/types/core/ui/form/form.d.ts +1 -0
- package/types/core/ui/form/inputs/area/area.d.ts +7 -1
- package/types/core/ui/form/inputs/checkbox/checkbox.d.ts +10 -3
- package/types/core/ui/icon.d.ts +1 -1
- package/types/core/ui/list/group.d.ts +2 -1
- package/types/core/ui/popup/popup.d.ts +2 -1
- package/types/jodit.d.ts +6 -6
- package/types/modules/toolbar/button/button.d.ts +1 -1
- package/types/modules/widget/tabs/tabs.d.ts +2 -1
- package/types/plugins/index.d.ts +1 -1
- package/types/plugins/keyboard/backspace/backspace.d.ts +28 -0
- package/types/plugins/keyboard/backspace/cases/check-join-neighbors.d.ts +10 -0
- package/types/plugins/keyboard/backspace/cases/check-join-two-lists.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/check-not-collapsed.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/check-remove-char.d.ts +20 -0
- package/types/plugins/keyboard/backspace/cases/check-remove-content-not-editable.d.ts +10 -0
- package/types/plugins/keyboard/backspace/cases/check-remove-empty-neighbor.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/check-remove-empty-parent.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/check-remove-unbreakable-element.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/check-table-cell.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/check-unwrap-first-list-item.d.ts +19 -0
- package/types/plugins/keyboard/backspace/cases/index.d.ts +8 -0
- package/types/plugins/keyboard/backspace/config.d.ts +20 -0
- package/types/plugins/keyboard/helpers.d.ts +2 -2
- package/types/plugins/select.d.ts +0 -1
- package/types/plugins/source/const.d.ts +6 -0
- package/types/plugins/source/editor/engines/ace.d.ts +1 -0
- package/types/plugins/source/source.d.ts +1 -0
- package/types/types/{ajax.d.ts → types/ajax.d.ts} +3 -0
- package/types/types/{async.d.ts → types/async.d.ts} +2 -0
- package/types/types/{context.d.ts → types/context.d.ts} +0 -0
- package/types/types/{core.ts → types/core.ts} +0 -0
- package/types/types/{create.d.ts → types/create.d.ts} +0 -0
- package/types/types/{dialog.d.ts → types/dialog.d.ts} +0 -0
- package/types/types/{events.d.ts → types/events.d.ts} +0 -0
- package/types/types/{file-browser.d.ts → types/file-browser.d.ts} +0 -0
- package/types/types/{form.d.ts → types/form.d.ts} +0 -0
- package/types/types/{index.d.ts → types/index.d.ts} +0 -0
- package/types/types/{jodit.d.ts → types/jodit.d.ts} +5 -8
- package/types/types/{observe.d.ts → types/observe.d.ts} +0 -0
- package/types/types/{plugin.d.ts → types/plugin.d.ts} +0 -0
- package/types/types/{popup.d.ts → types/popup.d.ts} +1 -0
- package/types/types/{select.d.ts → types/select.d.ts} +0 -0
- package/types/types/{source.d.ts → types/source.d.ts} +0 -0
- package/types/types/{storage.ts → types/storage.ts} +0 -0
- package/types/types/{style.d.ts → types/style.d.ts} +0 -0
- package/types/types/{toolbar.d.ts → types/toolbar.d.ts} +0 -0
- package/types/types/{traits.d.ts → types/traits.d.ts} +0 -0
- package/types/types/{types.d.ts → types/types.d.ts} +0 -0
- package/types/types/{ui.d.ts → types/ui.d.ts} +23 -4
- package/types/types/{uploader.d.ts → types/uploader.d.ts} +0 -0
- package/types/types/{view.d.ts → types/view.d.ts} +0 -0
- package/src/plugins/keyboard/delete.ts +0 -746
- package/types/plugins/keyboard/delete.d.ts +0 -161
package/build/jodit.es2018.en.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* jodit - Jodit is awesome and usefully wysiwyg editor with filebrowser
|
|
3
3
|
* Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/)
|
|
4
|
-
* Version: v3.
|
|
4
|
+
* Version: v3.11.2
|
|
5
5
|
* Url: https://xdsoft.net/jodit/
|
|
6
6
|
* License(s): MIT
|
|
7
7
|
*/
|
|
@@ -801,7 +801,7 @@ class EventEmitter {
|
|
|
801
801
|
}
|
|
802
802
|
const newCallback = (...args) => {
|
|
803
803
|
this.off(subject, events, newCallback);
|
|
804
|
-
callback(...args);
|
|
804
|
+
return callback(...args);
|
|
805
805
|
};
|
|
806
806
|
this.on(subject, events, newCallback, onTop);
|
|
807
807
|
return this;
|
|
@@ -1254,6 +1254,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
1254
1254
|
"keys": function() { return /* reexport */ utils/* keys */.XP; },
|
|
1255
1255
|
"loadImage": function() { return /* reexport */ utils/* loadImage */.po; },
|
|
1256
1256
|
"loadNext": function() { return /* reexport */ loadNext; },
|
|
1257
|
+
"loadNextStyle": function() { return /* reexport */ loadNextStyle; },
|
|
1257
1258
|
"markAsAtomic": function() { return /* reexport */ markAsAtomic; },
|
|
1258
1259
|
"markDeprecated": function() { return /* reexport */ utils/* markDeprecated */.Q8; },
|
|
1259
1260
|
"markOwner": function() { return /* reexport */ utils/* markOwner */.MN; },
|
|
@@ -2028,6 +2029,12 @@ const loadNext = (jodit, urls, i = 0) => {
|
|
|
2028
2029
|
}
|
|
2029
2030
|
return appendScriptAsync(jodit, urls[i]).then(() => loadNext(jodit, urls, i + 1));
|
|
2030
2031
|
};
|
|
2032
|
+
const loadNextStyle = (jodit, urls, i = 0) => {
|
|
2033
|
+
if (!(0,checker/* isString */.HD)(urls[i])) {
|
|
2034
|
+
return Promise.resolve();
|
|
2035
|
+
}
|
|
2036
|
+
return appendStyleAsync(jodit, urls[i]).then(() => loadNextStyle(jodit, urls, i + 1));
|
|
2037
|
+
};
|
|
2031
2038
|
|
|
2032
2039
|
;// CONCATENATED MODULE: ./src/core/helpers/browser.ts
|
|
2033
2040
|
/*!
|
|
@@ -2663,13 +2670,12 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
2663
2670
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
2664
2671
|
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
2665
2672
|
*/
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
})(STATUSES || (STATUSES = {}));
|
|
2673
|
+
const STATUSES = {
|
|
2674
|
+
beforeInit: 'beforeInit',
|
|
2675
|
+
ready: 'ready',
|
|
2676
|
+
beforeDestruct: 'beforeDestruct',
|
|
2677
|
+
destructed: 'destructed'
|
|
2678
|
+
};
|
|
2673
2679
|
|
|
2674
2680
|
// EXTERNAL MODULE: ./src/core/helpers/index.ts + 33 modules
|
|
2675
2681
|
var helpers = __webpack_require__(8);
|
|
@@ -2854,9 +2860,18 @@ class ViewComponent extends Component {
|
|
|
2854
2860
|
|
|
2855
2861
|
const instances = {};
|
|
2856
2862
|
let counter = 1;
|
|
2863
|
+
const uuids = new Set();
|
|
2857
2864
|
function uniqueUid() {
|
|
2858
|
-
|
|
2859
|
-
|
|
2865
|
+
function gen() {
|
|
2866
|
+
counter += 10 * (Math.random() + 1);
|
|
2867
|
+
return Math.round(counter).toString(16);
|
|
2868
|
+
}
|
|
2869
|
+
let uid = gen();
|
|
2870
|
+
while (uuids.has(uid)) {
|
|
2871
|
+
uid = gen();
|
|
2872
|
+
}
|
|
2873
|
+
uuids.add(uid);
|
|
2874
|
+
return uid;
|
|
2860
2875
|
}
|
|
2861
2876
|
const pluginSystem = new _plugin_system__WEBPACK_IMPORTED_MODULE_0__/* .PluginSystem */ .h();
|
|
2862
2877
|
const modules = {};
|
|
@@ -2873,7 +2888,7 @@ const extendLang = (langs) => {
|
|
|
2873
2888
|
};
|
|
2874
2889
|
const boxes = new WeakMap();
|
|
2875
2890
|
function getContainer(jodit, classFunc, tag = 'div', createInsideEditor = false) {
|
|
2876
|
-
const name = (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.getClassName)(classFunc.prototype);
|
|
2891
|
+
const name = classFunc ? (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.getClassName)(classFunc.prototype) : 'jodit-utils';
|
|
2877
2892
|
const data = boxes.get(jodit) || {}, key = name + tag;
|
|
2878
2893
|
const view = (0,_helpers___WEBPACK_IMPORTED_MODULE_2__.isViewObject)(jodit) ? jodit : jodit.j;
|
|
2879
2894
|
if (!data[key]) {
|
|
@@ -3164,6 +3179,9 @@ class Dom {
|
|
|
3164
3179
|
}
|
|
3165
3180
|
}
|
|
3166
3181
|
static replace(elm, newTagName, create, withAttributes = false, notMoveContent = false) {
|
|
3182
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isHTML)(newTagName)) {
|
|
3183
|
+
newTagName = create.fromHTML(newTagName);
|
|
3184
|
+
}
|
|
3167
3185
|
const tag = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(newTagName)
|
|
3168
3186
|
? create.element(newTagName)
|
|
3169
3187
|
: newTagName;
|
|
@@ -3192,6 +3210,11 @@ class Dom {
|
|
|
3192
3210
|
static isEmptyContent(node) {
|
|
3193
3211
|
return Dom.each(node, (elm) => Dom.isEmptyTextNode(elm));
|
|
3194
3212
|
}
|
|
3213
|
+
static isContentEditable(node, root) {
|
|
3214
|
+
return (Dom.isNode(node) &&
|
|
3215
|
+
!Dom.closest(node, elm => Dom.isElement(elm) &&
|
|
3216
|
+
elm.getAttribute('contenteditable') === 'false', root));
|
|
3217
|
+
}
|
|
3195
3218
|
static isEmpty(node, condNoEmptyElement = /^(img|svg|canvas|input|textarea|form)$/) {
|
|
3196
3219
|
if (!node) {
|
|
3197
3220
|
return true;
|
|
@@ -3386,9 +3409,7 @@ class Dom {
|
|
|
3386
3409
|
return null;
|
|
3387
3410
|
}
|
|
3388
3411
|
static findSibling(node, left = true, cond = (n) => !Dom.isEmptyTextNode(n)) {
|
|
3389
|
-
const getSibling = (node) =>
|
|
3390
|
-
return left ? node.previousSibling : node.nextSibling;
|
|
3391
|
-
};
|
|
3412
|
+
const getSibling = (node) => left ? node.previousSibling : node.nextSibling;
|
|
3392
3413
|
let start = getSibling(node);
|
|
3393
3414
|
while (start && !cond(start)) {
|
|
3394
3415
|
start = getSibling(start);
|
|
@@ -3637,7 +3658,7 @@ function getShadowRoot(jodit) {
|
|
|
3637
3658
|
if ((0,helpers.dataBind)(jodit, 'shadowRoot') !== undefined) {
|
|
3638
3659
|
return (0,helpers.dataBind)(jodit, 'shadowRoot');
|
|
3639
3660
|
}
|
|
3640
|
-
const container = (0,global/* getContainer */.ZO)(jodit
|
|
3661
|
+
const container = (0,global/* getContainer */.ZO)(jodit);
|
|
3641
3662
|
const iframe = document.createElement('iframe');
|
|
3642
3663
|
(0,helpers.css)(iframe, {
|
|
3643
3664
|
width: 0,
|
|
@@ -7104,9 +7125,9 @@ class UIElement extends _component__WEBPACK_IMPORTED_MODULE_0__/* .ViewComponent
|
|
|
7104
7125
|
return null;
|
|
7105
7126
|
}
|
|
7106
7127
|
static closestElement(node, type) {
|
|
7107
|
-
const elm = _dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom.up */ .i.up(node,
|
|
7108
|
-
if (
|
|
7109
|
-
const { component } =
|
|
7128
|
+
const elm = _dom__WEBPACK_IMPORTED_MODULE_1__/* .Dom.up */ .i.up(node, elm => {
|
|
7129
|
+
if (elm) {
|
|
7130
|
+
const { component } = elm;
|
|
7110
7131
|
return component && component instanceof type;
|
|
7111
7132
|
}
|
|
7112
7133
|
return false;
|
|
@@ -7261,6 +7282,7 @@ class Icon {
|
|
|
7261
7282
|
}
|
|
7262
7283
|
static set(name, value) {
|
|
7263
7284
|
this.icons[name.replace('_', '-')] = value;
|
|
7285
|
+
return this;
|
|
7264
7286
|
}
|
|
7265
7287
|
static makeIcon(jodit, icon) {
|
|
7266
7288
|
var _a;
|
|
@@ -7346,7 +7368,7 @@ const UIButtonState = () => ({
|
|
|
7346
7368
|
type: 'button',
|
|
7347
7369
|
name: '',
|
|
7348
7370
|
value: '',
|
|
7349
|
-
|
|
7371
|
+
variant: 'initial',
|
|
7350
7372
|
disabled: false,
|
|
7351
7373
|
activated: false,
|
|
7352
7374
|
icon: {
|
|
@@ -7394,7 +7416,7 @@ let UIButton = class UIButton extends ui_element/* UIElement */.u {
|
|
|
7394
7416
|
}
|
|
7395
7417
|
}
|
|
7396
7418
|
onChangeStatus() {
|
|
7397
|
-
this.setMod('
|
|
7419
|
+
this.setMod('variant', this.state.variant);
|
|
7398
7420
|
}
|
|
7399
7421
|
onChangeText() {
|
|
7400
7422
|
this.text.textContent = this.jodit.i18n(this.state.text);
|
|
@@ -7480,7 +7502,7 @@ let UIButton = class UIButton extends ui_element/* UIElement */.u {
|
|
|
7480
7502
|
(0,decorators.watch)('parentElement')
|
|
7481
7503
|
], UIButton.prototype, "updateSize", null);
|
|
7482
7504
|
(0,tslib_es6/* __decorate */.gn)([
|
|
7483
|
-
(0,decorators.watch)('state.
|
|
7505
|
+
(0,decorators.watch)('state.variant')
|
|
7484
7506
|
], UIButton.prototype, "onChangeStatus", null);
|
|
7485
7507
|
(0,tslib_es6/* __decorate */.gn)([
|
|
7486
7508
|
(0,decorators.watch)('state.text')
|
|
@@ -7513,14 +7535,14 @@ UIButton = (0,tslib_es6/* __decorate */.gn)([
|
|
|
7513
7535
|
decorators.component
|
|
7514
7536
|
], UIButton);
|
|
7515
7537
|
|
|
7516
|
-
function Button(jodit, stateOrText, text,
|
|
7538
|
+
function Button(jodit, stateOrText, text, variant) {
|
|
7517
7539
|
const button = new UIButton(jodit);
|
|
7518
7540
|
button.state.tabIndex = jodit.o.allowTabNavigation ? 0 : -1;
|
|
7519
7541
|
if ((0,helpers.isString)(stateOrText)) {
|
|
7520
7542
|
button.state.icon.name = stateOrText;
|
|
7521
7543
|
button.state.name = stateOrText;
|
|
7522
|
-
if (
|
|
7523
|
-
button.state.
|
|
7544
|
+
if (variant) {
|
|
7545
|
+
button.state.variant = variant;
|
|
7524
7546
|
}
|
|
7525
7547
|
if (text) {
|
|
7526
7548
|
button.state.text = text;
|
|
@@ -7554,7 +7576,7 @@ let UIButtonGroup = class UIButtonGroup extends group/* UIGroup */.q {
|
|
|
7554
7576
|
const btn = new UIButton(jodit, {
|
|
7555
7577
|
text: opt.text,
|
|
7556
7578
|
value: opt.value,
|
|
7557
|
-
|
|
7579
|
+
variant: 'primary'
|
|
7558
7580
|
});
|
|
7559
7581
|
btn.onAction(() => {
|
|
7560
7582
|
this.select(opt.value);
|
|
@@ -7877,6 +7899,7 @@ var UIGroup_1;
|
|
|
7877
7899
|
let UIGroup = UIGroup_1 = class UIGroup extends _element__WEBPACK_IMPORTED_MODULE_0__/* .UIElement */ .u {
|
|
7878
7900
|
constructor(jodit, elements, options) {
|
|
7879
7901
|
super(jodit, options);
|
|
7902
|
+
this.options = options;
|
|
7880
7903
|
this.syncMod = false;
|
|
7881
7904
|
this.elements = [];
|
|
7882
7905
|
this.buttonSize = 'middle';
|
|
@@ -7913,7 +7936,7 @@ let UIGroup = UIGroup_1 = class UIGroup extends _element__WEBPACK_IMPORTED_MODUL
|
|
|
7913
7936
|
}
|
|
7914
7937
|
append(elm, distElement) {
|
|
7915
7938
|
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isArray)(elm)) {
|
|
7916
|
-
elm.forEach(item => this.append(item));
|
|
7939
|
+
elm.forEach(item => this.append(item, distElement));
|
|
7917
7940
|
return this;
|
|
7918
7941
|
}
|
|
7919
7942
|
this.elements.push(elm);
|
|
@@ -8155,6 +8178,7 @@ class Popup extends ui_element/* UIElement */.u {
|
|
|
8155
8178
|
}
|
|
8156
8179
|
open(getBound, keepPosition = false) {
|
|
8157
8180
|
(0,helpers.markOwner)(this.jodit, this.container);
|
|
8181
|
+
this.calculateZIndex();
|
|
8158
8182
|
this.isOpened = true;
|
|
8159
8183
|
this.addGlobalListeners();
|
|
8160
8184
|
this.targetBound = !keepPosition
|
|
@@ -8168,6 +8192,40 @@ class Popup extends ui_element/* UIElement */.u {
|
|
|
8168
8192
|
this.j.e.fire(this, 'afterOpen');
|
|
8169
8193
|
return this;
|
|
8170
8194
|
}
|
|
8195
|
+
calculateZIndex() {
|
|
8196
|
+
if (this.container.style.zIndex) {
|
|
8197
|
+
return;
|
|
8198
|
+
}
|
|
8199
|
+
const checkView = (view) => {
|
|
8200
|
+
const zIndex = view.container.style.zIndex || view.o.zIndex;
|
|
8201
|
+
if (zIndex) {
|
|
8202
|
+
this.setZIndex(1 + parseInt(zIndex.toString(), 10));
|
|
8203
|
+
return true;
|
|
8204
|
+
}
|
|
8205
|
+
return false;
|
|
8206
|
+
};
|
|
8207
|
+
if (checkView(this.j)) {
|
|
8208
|
+
return;
|
|
8209
|
+
}
|
|
8210
|
+
let pe = this.parentElement;
|
|
8211
|
+
while (pe) {
|
|
8212
|
+
if (checkView(pe.j)) {
|
|
8213
|
+
return;
|
|
8214
|
+
}
|
|
8215
|
+
if (pe.container.style.zIndex) {
|
|
8216
|
+
this.setZIndex(1 + parseInt(pe.container.style.zIndex.toString(), 10));
|
|
8217
|
+
return;
|
|
8218
|
+
}
|
|
8219
|
+
if (!pe.parentElement && pe.container.parentElement) {
|
|
8220
|
+
const elm = ui_element/* UIElement.closestElement */.u.closestElement(pe.container.parentElement, ui_element/* UIElement */.u);
|
|
8221
|
+
if (elm) {
|
|
8222
|
+
pe = elm;
|
|
8223
|
+
continue;
|
|
8224
|
+
}
|
|
8225
|
+
}
|
|
8226
|
+
pe = pe.parentElement;
|
|
8227
|
+
}
|
|
8228
|
+
}
|
|
8171
8229
|
getKeepBound(getBound) {
|
|
8172
8230
|
const oldBound = getBound();
|
|
8173
8231
|
const elmUnderCursor = this.od.elementFromPoint(oldBound.left, oldBound.top);
|
|
@@ -8264,14 +8322,16 @@ class Popup extends ui_element/* UIElement */.u {
|
|
|
8264
8322
|
return this;
|
|
8265
8323
|
}
|
|
8266
8324
|
closeOnOutsideClick(e) {
|
|
8325
|
+
var _a;
|
|
8267
8326
|
if (!this.isOpened) {
|
|
8268
8327
|
return;
|
|
8269
8328
|
}
|
|
8270
|
-
|
|
8329
|
+
const target = (_a = ((0,helpers.isFunction)(e.composedPath) && e.composedPath()[0])) !== null && _a !== void 0 ? _a : e.target;
|
|
8330
|
+
if (!target) {
|
|
8271
8331
|
this.close();
|
|
8272
8332
|
return;
|
|
8273
8333
|
}
|
|
8274
|
-
const box = ui_element/* UIElement.closestElement */.u.closestElement(
|
|
8334
|
+
const box = ui_element/* UIElement.closestElement */.u.closestElement(target, Popup);
|
|
8275
8335
|
if (box && (this === box || box.closest(this))) {
|
|
8276
8336
|
return;
|
|
8277
8337
|
}
|
|
@@ -8457,6 +8517,9 @@ let UIInput = UIInput_1 = class UIInput extends ui_element/* UIElement */.u {
|
|
|
8457
8517
|
this.state = { ...UIInput_1.defaultState };
|
|
8458
8518
|
this.__errorBox = this.j.c.span(this.getFullElName('error'));
|
|
8459
8519
|
this.validators = new Set([]);
|
|
8520
|
+
if ((options === null || options === void 0 ? void 0 : options.value) !== undefined) {
|
|
8521
|
+
options.value = options.value.toString();
|
|
8522
|
+
}
|
|
8460
8523
|
Object.assign(this.state, options);
|
|
8461
8524
|
if (this.state.clearButton !== undefined) {
|
|
8462
8525
|
this.j.e
|
|
@@ -8553,14 +8616,19 @@ let UIInput = UIInput_1 = class UIInput extends ui_element/* UIElement */.u {
|
|
|
8553
8616
|
}
|
|
8554
8617
|
}
|
|
8555
8618
|
onChangeStateValue() {
|
|
8556
|
-
|
|
8619
|
+
const value = this.state.value.toString();
|
|
8620
|
+
if (value !== this.value) {
|
|
8621
|
+
this.value = value;
|
|
8622
|
+
}
|
|
8557
8623
|
}
|
|
8558
8624
|
onChangeValue() {
|
|
8559
8625
|
var _a, _b;
|
|
8560
8626
|
const { value } = this;
|
|
8561
|
-
this.state.value
|
|
8562
|
-
|
|
8563
|
-
|
|
8627
|
+
if (this.state.value !== value) {
|
|
8628
|
+
this.state.value = value;
|
|
8629
|
+
this.j.e.fire(this, 'change', value);
|
|
8630
|
+
(_b = (_a = this.state).onChange) === null || _b === void 0 ? void 0 : _b.call(_a, value);
|
|
8631
|
+
}
|
|
8564
8632
|
}
|
|
8565
8633
|
validate() {
|
|
8566
8634
|
this.error = '';
|
|
@@ -8639,11 +8707,20 @@ UIInput = UIInput_1 = (0,tslib_es6/* __decorate */.gn)([
|
|
|
8639
8707
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
8640
8708
|
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
8641
8709
|
*/
|
|
8710
|
+
var UITextArea_1;
|
|
8642
8711
|
|
|
8643
8712
|
|
|
8644
8713
|
|
|
8645
8714
|
|
|
8646
|
-
let UITextArea = class UITextArea extends UIInput {
|
|
8715
|
+
let UITextArea = UITextArea_1 = class UITextArea extends UIInput {
|
|
8716
|
+
constructor(jodit, state) {
|
|
8717
|
+
super(jodit, state);
|
|
8718
|
+
this.state = { ...UITextArea_1.defaultState };
|
|
8719
|
+
Object.assign(this.state, state);
|
|
8720
|
+
if (this.state.resizable === false) {
|
|
8721
|
+
this.nativeInput.style.resize = 'none';
|
|
8722
|
+
}
|
|
8723
|
+
}
|
|
8647
8724
|
className() {
|
|
8648
8725
|
return 'UITextArea';
|
|
8649
8726
|
}
|
|
@@ -8652,7 +8729,12 @@ let UITextArea = class UITextArea extends UIInput {
|
|
|
8652
8729
|
return super.createContainer(options);
|
|
8653
8730
|
}
|
|
8654
8731
|
};
|
|
8655
|
-
UITextArea =
|
|
8732
|
+
UITextArea.defaultState = {
|
|
8733
|
+
...UIInput.defaultState,
|
|
8734
|
+
size: 5,
|
|
8735
|
+
resizable: true
|
|
8736
|
+
};
|
|
8737
|
+
UITextArea = UITextArea_1 = (0,tslib_es6/* __decorate */.gn)([
|
|
8656
8738
|
decorators.component
|
|
8657
8739
|
], UITextArea);
|
|
8658
8740
|
|
|
@@ -8663,11 +8745,18 @@ UITextArea = (0,tslib_es6/* __decorate */.gn)([
|
|
|
8663
8745
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
8664
8746
|
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
8665
8747
|
*/
|
|
8748
|
+
var UICheckbox_1;
|
|
8666
8749
|
|
|
8667
8750
|
|
|
8668
8751
|
|
|
8669
8752
|
|
|
8670
|
-
|
|
8753
|
+
|
|
8754
|
+
let UICheckbox = UICheckbox_1 = class UICheckbox extends UIInput {
|
|
8755
|
+
constructor(jodit, options) {
|
|
8756
|
+
super(jodit, { ...options, type: 'checkbox' });
|
|
8757
|
+
this.state = { ...UICheckbox_1.defaultState };
|
|
8758
|
+
Object.assign(this.state, options);
|
|
8759
|
+
}
|
|
8671
8760
|
className() {
|
|
8672
8761
|
return 'UICheckbox';
|
|
8673
8762
|
}
|
|
@@ -8676,11 +8765,45 @@ let UICheckbox = class UICheckbox extends UIInput {
|
|
|
8676
8765
|
className: this.componentName
|
|
8677
8766
|
});
|
|
8678
8767
|
}
|
|
8679
|
-
|
|
8680
|
-
|
|
8768
|
+
onChangeChecked() {
|
|
8769
|
+
this.value = this.state.checked.toString();
|
|
8770
|
+
this.nativeInput.checked = this.state.checked;
|
|
8771
|
+
this.setMod('checked', this.state.checked);
|
|
8772
|
+
}
|
|
8773
|
+
onChangeNativeCheckBox() {
|
|
8774
|
+
this.state.checked = this.nativeInput.checked;
|
|
8775
|
+
}
|
|
8776
|
+
onChangeSwitch() {
|
|
8777
|
+
this.setMod('switch', this.state.switch);
|
|
8778
|
+
let slider = this.getElm('switch-slider');
|
|
8779
|
+
if (this.state.switch) {
|
|
8780
|
+
if (!slider) {
|
|
8781
|
+
slider = this.j.c.div(this.getFullElName('switch-slider'));
|
|
8782
|
+
}
|
|
8783
|
+
dom/* Dom.after */.i.after(this.nativeInput, slider);
|
|
8784
|
+
}
|
|
8785
|
+
else {
|
|
8786
|
+
dom/* Dom.safeRemove */.i.safeRemove(slider);
|
|
8787
|
+
}
|
|
8681
8788
|
}
|
|
8682
8789
|
};
|
|
8683
|
-
UICheckbox =
|
|
8790
|
+
UICheckbox.defaultState = {
|
|
8791
|
+
...UIInput.defaultState,
|
|
8792
|
+
checked: false,
|
|
8793
|
+
switch: false
|
|
8794
|
+
};
|
|
8795
|
+
(0,tslib_es6/* __decorate */.gn)([
|
|
8796
|
+
(0,decorators.watch)('state.checked'),
|
|
8797
|
+
(0,decorators.hook)('ready')
|
|
8798
|
+
], UICheckbox.prototype, "onChangeChecked", null);
|
|
8799
|
+
(0,tslib_es6/* __decorate */.gn)([
|
|
8800
|
+
(0,decorators.watch)('nativeInput:change')
|
|
8801
|
+
], UICheckbox.prototype, "onChangeNativeCheckBox", null);
|
|
8802
|
+
(0,tslib_es6/* __decorate */.gn)([
|
|
8803
|
+
(0,decorators.watch)('state.switch'),
|
|
8804
|
+
(0,decorators.hook)('ready')
|
|
8805
|
+
], UICheckbox.prototype, "onChangeSwitch", null);
|
|
8806
|
+
UICheckbox = UICheckbox_1 = (0,tslib_es6/* __decorate */.gn)([
|
|
8684
8807
|
decorators.component
|
|
8685
8808
|
], UICheckbox);
|
|
8686
8809
|
|
|
@@ -8839,6 +8962,13 @@ var utils = __webpack_require__(9);
|
|
|
8839
8962
|
|
|
8840
8963
|
|
|
8841
8964
|
let UIForm = class UIForm extends group/* UIGroup */.q {
|
|
8965
|
+
constructor(...args) {
|
|
8966
|
+
var _a, _b;
|
|
8967
|
+
super(...args);
|
|
8968
|
+
if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.className) {
|
|
8969
|
+
this.container.classList.add((_b = this.options) === null || _b === void 0 ? void 0 : _b.className);
|
|
8970
|
+
}
|
|
8971
|
+
}
|
|
8842
8972
|
className() {
|
|
8843
8973
|
return 'UIForm';
|
|
8844
8974
|
}
|
|
@@ -9066,7 +9196,7 @@ const TabsWidget = (editor, tabs, state) => {
|
|
|
9066
9196
|
buttonList.push(button);
|
|
9067
9197
|
button.container.classList.add('jodit-tabs__button', 'jodit-tabs__button_columns_' + tabs.length);
|
|
9068
9198
|
if (!(0,helpers.isFunction)(content)) {
|
|
9069
|
-
tab.appendChild(content);
|
|
9199
|
+
tab.appendChild(content instanceof ui/* UIElement */.u1 ? content.container : content);
|
|
9070
9200
|
}
|
|
9071
9201
|
else {
|
|
9072
9202
|
tab.appendChild(editor.c.div('jodit-tab_empty'));
|
|
@@ -9165,7 +9295,7 @@ const FileSelectorWidget = (editor, callbacks, elm, close, isImage = true) => {
|
|
|
9165
9295
|
if (callbacks.url) {
|
|
9166
9296
|
const button = new ui/* UIButton */.y3(editor, {
|
|
9167
9297
|
type: 'submit',
|
|
9168
|
-
|
|
9298
|
+
variant: 'primary',
|
|
9169
9299
|
text: 'Insert'
|
|
9170
9300
|
}), form = new ui/* UIForm */.x4(editor, [
|
|
9171
9301
|
new ui/* UIInput */.u3(editor, {
|
|
@@ -10197,7 +10327,7 @@ __webpack_require__.d(modules_namespaceObject, {
|
|
|
10197
10327
|
var plugins_namespaceObject = {};
|
|
10198
10328
|
__webpack_require__.r(plugins_namespaceObject);
|
|
10199
10329
|
__webpack_require__.d(plugins_namespaceObject, {
|
|
10200
|
-
"
|
|
10330
|
+
"Backspace": function() { return Backspace; },
|
|
10201
10331
|
"DragAndDrop": function() { return DragAndDrop; },
|
|
10202
10332
|
"DragAndDropElement": function() { return DragAndDropElement; },
|
|
10203
10333
|
"KeyArrowOutside": function() { return KeyArrowOutside; },
|
|
@@ -10381,6 +10511,9 @@ class Async {
|
|
|
10381
10511
|
});
|
|
10382
10512
|
this.isDestructed = false;
|
|
10383
10513
|
}
|
|
10514
|
+
delay(timeout) {
|
|
10515
|
+
return this.promise(resolve => this.setTimeout(resolve, timeout));
|
|
10516
|
+
}
|
|
10384
10517
|
setTimeout(callback, timeout, ...args) {
|
|
10385
10518
|
if (this.isDestructed) {
|
|
10386
10519
|
return 0;
|
|
@@ -10566,6 +10699,9 @@ class response_Response {
|
|
|
10566
10699
|
text() {
|
|
10567
10700
|
return Promise.resolve(this.body);
|
|
10568
10701
|
}
|
|
10702
|
+
async blob() {
|
|
10703
|
+
return this.body;
|
|
10704
|
+
}
|
|
10569
10705
|
}
|
|
10570
10706
|
|
|
10571
10707
|
;// CONCATENATED MODULE: ./src/core/request/config.ts
|
|
@@ -10645,12 +10781,15 @@ class Ajax {
|
|
|
10645
10781
|
};
|
|
10646
10782
|
const onResolve = () => {
|
|
10647
10783
|
this.resolved = true;
|
|
10648
|
-
resolve(new response_Response(request, xhr.status, xhr.statusText, xhr.responseText));
|
|
10784
|
+
resolve(new response_Response(request, xhr.status, xhr.statusText, !xhr.responseType ? xhr.responseText : xhr.response));
|
|
10649
10785
|
};
|
|
10786
|
+
xhr.onload = onResolve;
|
|
10650
10787
|
xhr.onabort = onReject;
|
|
10651
10788
|
xhr.onerror = onReject;
|
|
10652
10789
|
xhr.ontimeout = onReject;
|
|
10653
|
-
|
|
10790
|
+
if (o.responseType) {
|
|
10791
|
+
xhr.responseType = o.responseType;
|
|
10792
|
+
}
|
|
10654
10793
|
xhr.onprogress = (e) => {
|
|
10655
10794
|
var _a, _b;
|
|
10656
10795
|
let percentComplete = 0;
|
|
@@ -10966,7 +11105,7 @@ class View extends component/* Component */.wA {
|
|
|
10966
11105
|
this.isView = true;
|
|
10967
11106
|
this.mods = {};
|
|
10968
11107
|
this.components = new Set();
|
|
10969
|
-
this.version = "3.
|
|
11108
|
+
this.version = "3.11.2";
|
|
10970
11109
|
this.async = new Async();
|
|
10971
11110
|
this.buffer = Storage.makeStorage();
|
|
10972
11111
|
this.storage = Storage.makeStorage(true, this.componentName);
|
|
@@ -11064,10 +11203,10 @@ class View extends component/* Component */.wA {
|
|
|
11064
11203
|
return this.__isFullSize;
|
|
11065
11204
|
}
|
|
11066
11205
|
getVersion() {
|
|
11067
|
-
return "3.
|
|
11206
|
+
return "3.11.2";
|
|
11068
11207
|
}
|
|
11069
11208
|
static getVersion() {
|
|
11070
|
-
return "3.
|
|
11209
|
+
return "3.11.2";
|
|
11071
11210
|
}
|
|
11072
11211
|
initOptions(options) {
|
|
11073
11212
|
this.options = (0,helpers.ConfigProto)(options || {}, (0,helpers.ConfigProto)(this.options || {}, View.defaultOptions));
|
|
@@ -11182,9 +11321,6 @@ let ToolbarCollection = class ToolbarCollection extends ui/* UIList */.bz {
|
|
|
11182
11321
|
return makeButton(this.j, control, target);
|
|
11183
11322
|
}
|
|
11184
11323
|
shouldBeActive(button) {
|
|
11185
|
-
if ((0,helpers.isJoditObject)(this.j) && !this.j.editorIsActive) {
|
|
11186
|
-
return false;
|
|
11187
|
-
}
|
|
11188
11324
|
if ((0,helpers.isFunction)(button.control.isActive)) {
|
|
11189
11325
|
return button.control.isActive(this.j, button.control, button);
|
|
11190
11326
|
}
|
|
@@ -11308,6 +11444,9 @@ let ToolbarEditorCollection = class ToolbarEditorCollection extends ToolbarColle
|
|
|
11308
11444
|
return !(mode === constants.MODE_SPLIT || mode === this.j.getRealMode());
|
|
11309
11445
|
}
|
|
11310
11446
|
shouldBeActive(button) {
|
|
11447
|
+
if ((0,helpers.isJoditObject)(this.j) && !this.j.editorIsActive) {
|
|
11448
|
+
return false;
|
|
11449
|
+
}
|
|
11311
11450
|
const active = super.shouldBeActive(button);
|
|
11312
11451
|
if (active !== undefined) {
|
|
11313
11452
|
return active;
|
|
@@ -12212,8 +12351,8 @@ let Dialog = class Dialog extends ViewWithToolbar {
|
|
|
12212
12351
|
e.stopImmediatePropagation();
|
|
12213
12352
|
e.preventDefault();
|
|
12214
12353
|
}
|
|
12215
|
-
if (this.e) {
|
|
12216
|
-
|
|
12354
|
+
if (this.e && this.e.fire('beforeClose', this) === false) {
|
|
12355
|
+
return this;
|
|
12217
12356
|
}
|
|
12218
12357
|
this.setMod('active', false);
|
|
12219
12358
|
this.isOpened = false;
|
|
@@ -16303,12 +16442,6 @@ class Jodit extends ViewWithToolbar {
|
|
|
16303
16442
|
div.innerHTML = this.getElementValue();
|
|
16304
16443
|
return div.innerText || '';
|
|
16305
16444
|
}
|
|
16306
|
-
get value() {
|
|
16307
|
-
return this.getEditorValue();
|
|
16308
|
-
}
|
|
16309
|
-
set value(html) {
|
|
16310
|
-
this.setEditorValue(html);
|
|
16311
|
-
}
|
|
16312
16445
|
get defaultTimeout() {
|
|
16313
16446
|
return this.options && this.o.observer
|
|
16314
16447
|
? this.o.observer.timeout
|
|
@@ -16441,9 +16574,15 @@ class Jodit extends ViewWithToolbar {
|
|
|
16441
16574
|
this.editor.innerHTML = data.value;
|
|
16442
16575
|
}
|
|
16443
16576
|
}
|
|
16444
|
-
|
|
16577
|
+
get value() {
|
|
16578
|
+
return this.getEditorValue();
|
|
16579
|
+
}
|
|
16580
|
+
set value(html) {
|
|
16581
|
+
this.setEditorValue(html);
|
|
16582
|
+
}
|
|
16583
|
+
getEditorValue(removeSelectionMarkers = true, consumer) {
|
|
16445
16584
|
let value;
|
|
16446
|
-
value = this.e.fire('beforeGetValueFromEditor');
|
|
16585
|
+
value = this.e.fire('beforeGetValueFromEditor', consumer);
|
|
16447
16586
|
if (value !== undefined) {
|
|
16448
16587
|
return value;
|
|
16449
16588
|
}
|
|
@@ -16455,7 +16594,7 @@ class Jodit extends ViewWithToolbar {
|
|
|
16455
16594
|
value = '';
|
|
16456
16595
|
}
|
|
16457
16596
|
const new_value = { value };
|
|
16458
|
-
this.e.fire('afterGetValueFromEditor', new_value);
|
|
16597
|
+
this.e.fire('afterGetValueFromEditor', new_value, consumer);
|
|
16459
16598
|
return new_value.value;
|
|
16460
16599
|
}
|
|
16461
16600
|
setEditorValue(value) {
|
|
@@ -17095,6 +17234,7 @@ config/* Config.prototype.addNewLineTagsTriggers */.D.prototype.addNewLineTagsTr
|
|
|
17095
17234
|
'iframe',
|
|
17096
17235
|
'img',
|
|
17097
17236
|
'hr',
|
|
17237
|
+
'pre',
|
|
17098
17238
|
'jodit'
|
|
17099
17239
|
];
|
|
17100
17240
|
config/* Config.prototype.addNewLineDeltaShow */.D.prototype.addNewLineDeltaShow = 20;
|
|
@@ -17501,11 +17641,11 @@ function findMostNestedNeighbor(node, right, root, onlyInlide = false) {
|
|
|
17501
17641
|
}
|
|
17502
17642
|
return null;
|
|
17503
17643
|
}
|
|
17504
|
-
function normalizeCursorPosition(node, backspace) {
|
|
17644
|
+
function normalizeCursorPosition(jodit, node, backspace) {
|
|
17505
17645
|
let sibling = dom/* Dom.findSibling */.i.findSibling(node, backspace), anotherSibling = dom/* Dom.findSibling */.i.findSibling(node, !backspace);
|
|
17506
17646
|
while (dom/* Dom.isElement */.i.isElement(sibling) &&
|
|
17507
17647
|
!dom/* Dom.isTag */.i.isTag(sibling, constants.INSEPARABLE_TAGS) &&
|
|
17508
|
-
!anotherSibling) {
|
|
17648
|
+
(!anotherSibling || !dom/* Dom.closest */.i.closest(node, dom/* Dom.isElement */.i.isElement, jodit.editor))) {
|
|
17509
17649
|
if (backspace || !sibling.firstChild) {
|
|
17510
17650
|
sibling.appendChild(node);
|
|
17511
17651
|
}
|
|
@@ -17517,7 +17657,7 @@ function normalizeCursorPosition(node, backspace) {
|
|
|
17517
17657
|
}
|
|
17518
17658
|
}
|
|
17519
17659
|
|
|
17520
|
-
;// CONCATENATED MODULE: ./src/plugins/keyboard/
|
|
17660
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-join-two-lists.ts
|
|
17521
17661
|
/*!
|
|
17522
17662
|
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17523
17663
|
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
@@ -17525,26 +17665,420 @@ function normalizeCursorPosition(node, backspace) {
|
|
|
17525
17665
|
*/
|
|
17526
17666
|
|
|
17527
17667
|
|
|
17668
|
+
function checkJoinTwoLists(jodit, fakeNode, backspace) {
|
|
17669
|
+
const next = dom/* Dom.findSibling */.i.findSibling(fakeNode, backspace), prev = dom/* Dom.findSibling */.i.findSibling(fakeNode, !backspace);
|
|
17670
|
+
if (!dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, jodit.editor) &&
|
|
17671
|
+
dom/* Dom.isTag */.i.isTag(next, ['ul', 'ol']) &&
|
|
17672
|
+
dom/* Dom.isTag */.i.isTag(prev, ['ul', 'ol']) &&
|
|
17673
|
+
dom/* Dom.isTag */.i.isTag(next.lastElementChild, 'li') &&
|
|
17674
|
+
dom/* Dom.isTag */.i.isTag(prev.firstElementChild, 'li')) {
|
|
17675
|
+
const { setCursorBefore, setCursorAfter } = jodit.s;
|
|
17676
|
+
const target = next.lastElementChild, second = prev.firstElementChild;
|
|
17677
|
+
(0,helpers.call)(!backspace ? dom/* Dom.append */.i.append : dom/* Dom.prepend */.i.prepend, second, fakeNode);
|
|
17678
|
+
dom/* Dom.moveContent */.i.moveContent(prev, next, !backspace);
|
|
17679
|
+
dom/* Dom.safeRemove */.i.safeRemove(prev);
|
|
17680
|
+
(0,helpers.call)(backspace ? dom/* Dom.append */.i.append : dom/* Dom.prepend */.i.prepend, target, fakeNode);
|
|
17681
|
+
(0,helpers.call)(backspace ? setCursorBefore : setCursorAfter, fakeNode);
|
|
17682
|
+
return true;
|
|
17683
|
+
}
|
|
17684
|
+
return false;
|
|
17685
|
+
}
|
|
17686
|
+
|
|
17687
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-remove-empty-parent.ts
|
|
17688
|
+
/*!
|
|
17689
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17690
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17691
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17692
|
+
*/
|
|
17528
17693
|
|
|
17529
17694
|
|
|
17530
17695
|
|
|
17531
17696
|
|
|
17697
|
+
function checkRemoveEmptyParent(jodit, fakeNode, backspace) {
|
|
17698
|
+
let found = false;
|
|
17699
|
+
const { setCursorBefore, setCursorIn } = jodit.s;
|
|
17700
|
+
let prn = dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, jodit.editor);
|
|
17701
|
+
if (!prn || !dom/* Dom.isEmpty */.i.isEmpty(prn)) {
|
|
17702
|
+
return false;
|
|
17703
|
+
}
|
|
17704
|
+
const neighbor = findNotEmptyNeighbor(fakeNode, backspace, jodit.editor);
|
|
17705
|
+
do {
|
|
17706
|
+
if (prn && dom/* Dom.isEmpty */.i.isEmpty(prn) && !dom/* Dom.isCell */.i.isCell(prn)) {
|
|
17707
|
+
dom/* Dom.after */.i.after(prn, fakeNode);
|
|
17708
|
+
const tmp = dom/* Dom.closest */.i.closest(prn, n => dom/* Dom.isElement */.i.isElement(n) && n !== prn, jodit.editor);
|
|
17709
|
+
dom/* Dom.safeRemove */.i.safeRemove(prn);
|
|
17710
|
+
found = true;
|
|
17711
|
+
prn = tmp;
|
|
17712
|
+
}
|
|
17713
|
+
else {
|
|
17714
|
+
break;
|
|
17715
|
+
}
|
|
17716
|
+
} while (prn);
|
|
17717
|
+
if (found && checkJoinTwoLists(jodit, fakeNode, backspace)) {
|
|
17718
|
+
return true;
|
|
17719
|
+
}
|
|
17720
|
+
if (neighbor &&
|
|
17721
|
+
!dom/* Dom.isText */.i.isText(neighbor) &&
|
|
17722
|
+
!dom/* Dom.isTag */.i.isTag(neighbor, constants.INSEPARABLE_TAGS)) {
|
|
17723
|
+
setCursorIn(neighbor, !backspace);
|
|
17724
|
+
}
|
|
17725
|
+
else {
|
|
17726
|
+
setCursorBefore(fakeNode);
|
|
17727
|
+
}
|
|
17728
|
+
return found;
|
|
17729
|
+
}
|
|
17730
|
+
|
|
17731
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-remove-unbreakable-element.ts
|
|
17732
|
+
/*!
|
|
17733
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17734
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17735
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17736
|
+
*/
|
|
17737
|
+
|
|
17738
|
+
|
|
17739
|
+
|
|
17740
|
+
function checkRemoveUnbreakableElement(jodit, fakeNode, backspace) {
|
|
17741
|
+
const neighbor = dom/* Dom.findSibling */.i.findSibling(fakeNode, backspace);
|
|
17742
|
+
if (dom/* Dom.isElement */.i.isElement(neighbor) &&
|
|
17743
|
+
(dom/* Dom.isTag */.i.isTag(neighbor, constants.INSEPARABLE_TAGS) || dom/* Dom.isEmpty */.i.isEmpty(neighbor))) {
|
|
17744
|
+
dom/* Dom.safeRemove */.i.safeRemove(neighbor);
|
|
17745
|
+
jodit.s.setCursorBefore(fakeNode);
|
|
17746
|
+
if (dom/* Dom.isTag */.i.isTag(neighbor, 'br')) {
|
|
17747
|
+
checkRemoveEmptyParent(jodit, fakeNode, backspace);
|
|
17748
|
+
}
|
|
17749
|
+
return true;
|
|
17750
|
+
}
|
|
17751
|
+
return false;
|
|
17752
|
+
}
|
|
17753
|
+
|
|
17754
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-remove-content-not-editable.ts
|
|
17755
|
+
|
|
17756
|
+
|
|
17757
|
+
|
|
17758
|
+
function checkRemoveContentNotEditable(jodit, fakeNode, backspace) {
|
|
17759
|
+
let neighbor = dom/* Dom.findSibling */.i.findSibling(fakeNode, backspace);
|
|
17760
|
+
if (!neighbor &&
|
|
17761
|
+
fakeNode.parentElement &&
|
|
17762
|
+
fakeNode.parentElement !== jodit.editor) {
|
|
17763
|
+
neighbor = dom/* Dom.findSibling */.i.findSibling(fakeNode.parentElement, backspace);
|
|
17764
|
+
}
|
|
17765
|
+
if (dom/* Dom.isElement */.i.isElement(neighbor) &&
|
|
17766
|
+
!dom/* Dom.isContentEditable */.i.isContentEditable(neighbor, jodit.editor)) {
|
|
17767
|
+
(0,helpers.call)(backspace ? dom/* Dom.before */.i.before : dom/* Dom.after */.i.after, neighbor, fakeNode);
|
|
17768
|
+
dom/* Dom.safeRemove */.i.safeRemove(neighbor);
|
|
17769
|
+
normalizeCursorPosition(jodit, fakeNode, backspace);
|
|
17770
|
+
(0,helpers.call)(backspace ? jodit.s.setCursorBefore : jodit.s.setCursorAfter, fakeNode);
|
|
17771
|
+
return true;
|
|
17772
|
+
}
|
|
17773
|
+
return false;
|
|
17774
|
+
}
|
|
17775
|
+
|
|
17776
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-remove-char.ts
|
|
17777
|
+
/*!
|
|
17778
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17779
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17780
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17781
|
+
*/
|
|
17782
|
+
|
|
17783
|
+
|
|
17784
|
+
|
|
17785
|
+
|
|
17786
|
+
function checkRemoveChar(jodit, fakeNode, backspace, mode) {
|
|
17787
|
+
var _a, _b, _c;
|
|
17788
|
+
const step = backspace ? -1 : 1;
|
|
17789
|
+
const anotherSibling = getSibling(fakeNode, !backspace);
|
|
17790
|
+
let sibling = getSibling(fakeNode, backspace), removeNeighbor = null;
|
|
17791
|
+
let charRemoved = false, removed;
|
|
17792
|
+
while (sibling && (dom/* Dom.isText */.i.isText(sibling) || dom/* Dom.isInlineBlock */.i.isInlineBlock(sibling))) {
|
|
17793
|
+
while (dom/* Dom.isInlineBlock */.i.isInlineBlock(sibling)) {
|
|
17794
|
+
sibling = (backspace ? sibling === null || sibling === void 0 ? void 0 : sibling.lastChild : sibling === null || sibling === void 0 ? void 0 : sibling.firstChild);
|
|
17795
|
+
}
|
|
17796
|
+
if (!sibling) {
|
|
17797
|
+
break;
|
|
17798
|
+
}
|
|
17799
|
+
if ((_a = sibling.nodeValue) === null || _a === void 0 ? void 0 : _a.length) {
|
|
17800
|
+
let value = (0,helpers.toArray)(sibling.nodeValue);
|
|
17801
|
+
const length = value.length;
|
|
17802
|
+
let index = backspace ? length - 1 : 0;
|
|
17803
|
+
if (value[index] === constants.INVISIBLE_SPACE) {
|
|
17804
|
+
while (value[index] === constants.INVISIBLE_SPACE) {
|
|
17805
|
+
index += step;
|
|
17806
|
+
}
|
|
17807
|
+
}
|
|
17808
|
+
removed = value[index];
|
|
17809
|
+
if (value[index + step] === constants.INVISIBLE_SPACE) {
|
|
17810
|
+
index += step;
|
|
17811
|
+
while (value[index] === constants.INVISIBLE_SPACE) {
|
|
17812
|
+
index += step;
|
|
17813
|
+
}
|
|
17814
|
+
index += backspace ? 1 : -1;
|
|
17815
|
+
}
|
|
17816
|
+
if (backspace && index < 0) {
|
|
17817
|
+
value = [];
|
|
17818
|
+
}
|
|
17819
|
+
else {
|
|
17820
|
+
value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
|
|
17821
|
+
}
|
|
17822
|
+
if (!anotherSibling ||
|
|
17823
|
+
!dom/* Dom.isText */.i.isText(anotherSibling) ||
|
|
17824
|
+
(!backspace ? / $/ : /^ /).test((_b = anotherSibling.nodeValue) !== null && _b !== void 0 ? _b : '') ||
|
|
17825
|
+
!(0,helpers.trimInv)(anotherSibling.nodeValue || '').length) {
|
|
17826
|
+
for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
|
|
17827
|
+
if (value[i] === ' ') {
|
|
17828
|
+
value[i] = constants.NBSP_SPACE;
|
|
17829
|
+
}
|
|
17830
|
+
else {
|
|
17831
|
+
break;
|
|
17832
|
+
}
|
|
17833
|
+
}
|
|
17834
|
+
}
|
|
17835
|
+
sibling.nodeValue = value.join('');
|
|
17836
|
+
}
|
|
17837
|
+
if (!((_c = sibling.nodeValue) === null || _c === void 0 ? void 0 : _c.length)) {
|
|
17838
|
+
removeNeighbor = sibling;
|
|
17839
|
+
}
|
|
17840
|
+
if (!(0,helpers.isVoid)(removed) && removed !== constants.INVISIBLE_SPACE) {
|
|
17841
|
+
charRemoved = true;
|
|
17842
|
+
(0,helpers.call)(backspace ? dom/* Dom.after */.i.after : dom/* Dom.before */.i.before, sibling, fakeNode);
|
|
17843
|
+
if (mode === 'sentence' ||
|
|
17844
|
+
(mode === 'word' && removed !== ' ' && removed !== constants.NBSP_SPACE)) {
|
|
17845
|
+
checkRemoveChar(jodit, fakeNode, backspace, mode);
|
|
17846
|
+
}
|
|
17847
|
+
break;
|
|
17848
|
+
}
|
|
17849
|
+
let nextSibling = getSibling(sibling, backspace);
|
|
17850
|
+
if (!nextSibling &&
|
|
17851
|
+
sibling.parentNode &&
|
|
17852
|
+
sibling.parentNode !== jodit.editor) {
|
|
17853
|
+
nextSibling = findMostNestedNeighbor(sibling, !backspace, jodit.editor, true);
|
|
17854
|
+
}
|
|
17855
|
+
if (removeNeighbor) {
|
|
17856
|
+
dom/* Dom.safeRemove */.i.safeRemove(removeNeighbor);
|
|
17857
|
+
removeNeighbor = null;
|
|
17858
|
+
}
|
|
17859
|
+
sibling = nextSibling;
|
|
17860
|
+
}
|
|
17861
|
+
if (charRemoved) {
|
|
17862
|
+
removeEmptyInlineParent(fakeNode);
|
|
17863
|
+
addBRInsideEmptyBlock(jodit, fakeNode);
|
|
17864
|
+
jodit.s.setCursorBefore(fakeNode);
|
|
17865
|
+
}
|
|
17866
|
+
return charRemoved;
|
|
17867
|
+
}
|
|
17868
|
+
function removeEmptyInlineParent(node) {
|
|
17869
|
+
let parent = node.parentElement;
|
|
17870
|
+
while (parent && dom/* Dom.isInlineBlock */.i.isInlineBlock(parent)) {
|
|
17871
|
+
const p = parent.parentElement;
|
|
17872
|
+
if (dom/* Dom.isEmpty */.i.isEmpty(parent)) {
|
|
17873
|
+
dom/* Dom.after */.i.after(parent, node);
|
|
17874
|
+
dom/* Dom.safeRemove */.i.safeRemove(parent);
|
|
17875
|
+
}
|
|
17876
|
+
parent = p;
|
|
17877
|
+
}
|
|
17878
|
+
}
|
|
17879
|
+
function addBRInsideEmptyBlock(jodit, node) {
|
|
17880
|
+
if (node.parentElement !== jodit.editor &&
|
|
17881
|
+
dom/* Dom.isBlock */.i.isBlock(node.parentElement) &&
|
|
17882
|
+
dom/* Dom.each */.i.each(node.parentElement, dom/* Dom.isEmptyTextNode */.i.isEmptyTextNode)) {
|
|
17883
|
+
dom/* Dom.after */.i.after(node, jodit.createInside.element('br'));
|
|
17884
|
+
}
|
|
17885
|
+
}
|
|
17886
|
+
|
|
17887
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-table-cell.ts
|
|
17888
|
+
/*!
|
|
17889
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17890
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17891
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17892
|
+
*/
|
|
17893
|
+
|
|
17894
|
+
function checkTableCell(jodit, fakeNode) {
|
|
17895
|
+
const cell = fakeNode.parentElement;
|
|
17896
|
+
if (dom/* Dom.isCell */.i.isCell(cell)) {
|
|
17897
|
+
return true;
|
|
17898
|
+
}
|
|
17899
|
+
return false;
|
|
17900
|
+
}
|
|
17901
|
+
|
|
17902
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-remove-empty-neighbor.ts
|
|
17903
|
+
/*!
|
|
17904
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17905
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17906
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17907
|
+
*/
|
|
17908
|
+
|
|
17909
|
+
|
|
17910
|
+
function checkRemoveEmptyNeighbor(jodit, fakeNode, backspace) {
|
|
17911
|
+
const parent = dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, jodit.editor);
|
|
17912
|
+
if (!parent) {
|
|
17913
|
+
return false;
|
|
17914
|
+
}
|
|
17915
|
+
const neighbor = findNotEmptySibling(parent, backspace);
|
|
17916
|
+
if (neighbor && dom/* Dom.isEmpty */.i.isEmpty(neighbor)) {
|
|
17917
|
+
dom/* Dom.safeRemove */.i.safeRemove(neighbor);
|
|
17918
|
+
jodit.s.setCursorBefore(fakeNode);
|
|
17919
|
+
return true;
|
|
17920
|
+
}
|
|
17921
|
+
return false;
|
|
17922
|
+
}
|
|
17923
|
+
|
|
17924
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-join-neighbors.ts
|
|
17925
|
+
/*!
|
|
17926
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17927
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17928
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17929
|
+
*/
|
|
17930
|
+
|
|
17931
|
+
|
|
17932
|
+
function checkJoinNeighbors(jodit, fakeNode, backspace) {
|
|
17933
|
+
let nextBox = fakeNode, mainClosestBox = nextBox;
|
|
17934
|
+
while (nextBox &&
|
|
17935
|
+
!findNotEmptySibling(nextBox, backspace) &&
|
|
17936
|
+
nextBox.parentElement !== jodit.editor) {
|
|
17937
|
+
nextBox = nextBox.parentElement;
|
|
17938
|
+
mainClosestBox = nextBox;
|
|
17939
|
+
}
|
|
17940
|
+
if (dom/* Dom.isElement */.i.isElement(mainClosestBox) &&
|
|
17941
|
+
dom/* Dom.isContentEditable */.i.isContentEditable(mainClosestBox, jodit.editor)) {
|
|
17942
|
+
const sibling = findNotEmptySibling(mainClosestBox, backspace);
|
|
17943
|
+
if (sibling &&
|
|
17944
|
+
(checkMoveListContent(jodit, mainClosestBox, sibling, backspace) ||
|
|
17945
|
+
moveContentAndRemoveEmpty(jodit, mainClosestBox, sibling, backspace))) {
|
|
17946
|
+
jodit.s.setCursorBefore(fakeNode);
|
|
17947
|
+
return true;
|
|
17948
|
+
}
|
|
17949
|
+
}
|
|
17950
|
+
return false;
|
|
17951
|
+
}
|
|
17952
|
+
function checkMoveListContent(jodit, mainClosestBox, sibling, backspace) {
|
|
17953
|
+
const siblingIsList = dom/* Dom.isTag */.i.isTag(sibling, ['ol', 'ul']);
|
|
17954
|
+
const boxIsList = dom/* Dom.isTag */.i.isTag(mainClosestBox, ['ol', 'ul']);
|
|
17955
|
+
const elementChild = (elm, side) => side ? elm.firstElementChild : elm.lastElementChild;
|
|
17956
|
+
if (boxIsList) {
|
|
17957
|
+
sibling = jodit.createInside.element(jodit.o.enterBlock);
|
|
17958
|
+
dom/* Dom.before */.i.before(mainClosestBox, sibling);
|
|
17959
|
+
return moveContentAndRemoveEmpty(jodit, elementChild(mainClosestBox, backspace), sibling, backspace);
|
|
17960
|
+
}
|
|
17961
|
+
if (sibling && siblingIsList && !boxIsList) {
|
|
17962
|
+
return moveContentAndRemoveEmpty(jodit, mainClosestBox, elementChild(sibling, !backspace), backspace);
|
|
17963
|
+
}
|
|
17964
|
+
return false;
|
|
17965
|
+
}
|
|
17966
|
+
function moveContentAndRemoveEmpty(jodit, mainClosestBox, sibling, backspace) {
|
|
17967
|
+
if (mainClosestBox && dom/* Dom.isElement */.i.isElement(sibling)) {
|
|
17968
|
+
dom/* Dom.moveContent */.i.moveContent(mainClosestBox, sibling, !backspace);
|
|
17969
|
+
let remove = mainClosestBox;
|
|
17970
|
+
while (remove && remove !== jodit.editor && dom/* Dom.isEmpty */.i.isEmpty(remove)) {
|
|
17971
|
+
const parent = remove.parentElement;
|
|
17972
|
+
dom/* Dom.safeRemove */.i.safeRemove(remove);
|
|
17973
|
+
remove = parent;
|
|
17974
|
+
}
|
|
17975
|
+
return true;
|
|
17976
|
+
}
|
|
17977
|
+
return false;
|
|
17978
|
+
}
|
|
17979
|
+
|
|
17980
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-unwrap-first-list-item.ts
|
|
17981
|
+
/*!
|
|
17982
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
17983
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
17984
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
17985
|
+
*/
|
|
17986
|
+
|
|
17987
|
+
|
|
17988
|
+
function checkUnwrapFirstListItem(jodit, fakeNode, backspace) {
|
|
17989
|
+
var _a;
|
|
17990
|
+
const li = dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, jodit.editor);
|
|
17991
|
+
const { s } = jodit;
|
|
17992
|
+
if (dom/* Dom.isTag */.i.isTag(li, 'li') &&
|
|
17993
|
+
((_a = li === null || li === void 0 ? void 0 : li.parentElement) === null || _a === void 0 ? void 0 : _a[backspace ? 'firstElementChild' : 'lastElementChild']) === li &&
|
|
17994
|
+
s.cursorInTheEdge(backspace, li)) {
|
|
17995
|
+
const ul = li.parentElement;
|
|
17996
|
+
const p = jodit.createInside.element(jodit.o.enterBlock);
|
|
17997
|
+
(0,helpers.call)(backspace ? dom/* Dom.before */.i.before : dom/* Dom.after */.i.after, ul, p);
|
|
17998
|
+
dom/* Dom.moveContent */.i.moveContent(li, p);
|
|
17999
|
+
dom/* Dom.safeRemove */.i.safeRemove(li);
|
|
18000
|
+
if (dom/* Dom.isEmpty */.i.isEmpty(ul)) {
|
|
18001
|
+
dom/* Dom.safeRemove */.i.safeRemove(ul);
|
|
18002
|
+
}
|
|
18003
|
+
(0,helpers.call)(backspace ? s.setCursorBefore : s.setCursorAfter, fakeNode);
|
|
18004
|
+
return true;
|
|
18005
|
+
}
|
|
18006
|
+
return false;
|
|
18007
|
+
}
|
|
18008
|
+
|
|
18009
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/index.ts
|
|
18010
|
+
/*!
|
|
18011
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
18012
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
18013
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
18014
|
+
*/
|
|
18015
|
+
|
|
18016
|
+
|
|
18017
|
+
|
|
18018
|
+
|
|
18019
|
+
|
|
18020
|
+
|
|
18021
|
+
|
|
18022
|
+
|
|
18023
|
+
|
|
18024
|
+
const cases = [
|
|
18025
|
+
checkRemoveUnbreakableElement,
|
|
18026
|
+
checkRemoveContentNotEditable,
|
|
18027
|
+
checkRemoveChar,
|
|
18028
|
+
checkTableCell,
|
|
18029
|
+
checkRemoveEmptyParent,
|
|
18030
|
+
checkRemoveEmptyNeighbor,
|
|
18031
|
+
checkJoinTwoLists,
|
|
18032
|
+
checkJoinNeighbors,
|
|
18033
|
+
checkUnwrapFirstListItem
|
|
18034
|
+
];
|
|
18035
|
+
|
|
18036
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/cases/check-not-collapsed.ts
|
|
18037
|
+
function checkNotCollapsed(jodit) {
|
|
18038
|
+
if (!jodit.s.isCollapsed()) {
|
|
18039
|
+
jodit.execCommand('Delete');
|
|
18040
|
+
return true;
|
|
18041
|
+
}
|
|
18042
|
+
return false;
|
|
18043
|
+
}
|
|
18044
|
+
|
|
18045
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/config.ts
|
|
18046
|
+
/*!
|
|
18047
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
18048
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
18049
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
18050
|
+
*/
|
|
18051
|
+
|
|
17532
18052
|
config/* Config.prototype.delete */.D.prototype["delete"] = {
|
|
17533
18053
|
hotkeys: {
|
|
17534
18054
|
delete: ['delete', 'cmd+backspace'],
|
|
17535
18055
|
deleteWord: ['ctrl+delete', 'cmd+alt+backspace', 'ctrl+alt+backspace'],
|
|
18056
|
+
deleteSentence: ['ctrl+shift+delete', 'cmd+shift+delete'],
|
|
17536
18057
|
backspace: ['backspace'],
|
|
17537
|
-
backspaceWord: ['ctrl+backspace']
|
|
18058
|
+
backspaceWord: ['ctrl+backspace'],
|
|
18059
|
+
backspaceSentence: ['ctrl+shift+backspace', 'cmd+shift+backspace']
|
|
17538
18060
|
}
|
|
17539
18061
|
};
|
|
17540
|
-
|
|
18062
|
+
|
|
18063
|
+
;// CONCATENATED MODULE: ./src/plugins/keyboard/backspace/backspace.ts
|
|
18064
|
+
/*!
|
|
18065
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
18066
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
18067
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
18068
|
+
*/
|
|
18069
|
+
|
|
18070
|
+
|
|
18071
|
+
|
|
18072
|
+
|
|
18073
|
+
|
|
18074
|
+
|
|
18075
|
+
|
|
18076
|
+
|
|
18077
|
+
class Backspace extends Plugin {
|
|
17541
18078
|
constructor() {
|
|
17542
18079
|
super(...arguments);
|
|
17543
18080
|
this.requires = ['hotkeys'];
|
|
17544
18081
|
}
|
|
17545
|
-
get root() {
|
|
17546
|
-
return this.j.editor;
|
|
17547
|
-
}
|
|
17548
18082
|
afterInit(jodit) {
|
|
17549
18083
|
jodit.e.on('afterCommand.delete', (command) => {
|
|
17550
18084
|
if (command === 'delete') {
|
|
@@ -17565,12 +18099,20 @@ class Delete extends Plugin {
|
|
|
17565
18099
|
stopPropagation: false
|
|
17566
18100
|
})
|
|
17567
18101
|
.registerCommand('deleteWordButton', {
|
|
17568
|
-
exec: () => this.onDelete(false,
|
|
18102
|
+
exec: () => this.onDelete(false, 'word'),
|
|
17569
18103
|
hotkeys: jodit.o.delete.hotkeys.deleteWord
|
|
17570
18104
|
})
|
|
17571
18105
|
.registerCommand('backspaceWordButton', {
|
|
17572
|
-
exec: () => this.onDelete(true,
|
|
18106
|
+
exec: () => this.onDelete(true, 'word'),
|
|
17573
18107
|
hotkeys: jodit.o.delete.hotkeys.backspaceWord
|
|
18108
|
+
})
|
|
18109
|
+
.registerCommand('deleteSentenceButton', {
|
|
18110
|
+
exec: () => this.onDelete(false, 'sentence'),
|
|
18111
|
+
hotkeys: jodit.o.delete.hotkeys.deleteSentence
|
|
18112
|
+
})
|
|
18113
|
+
.registerCommand('backspaceSentenceButton', {
|
|
18114
|
+
exec: () => this.onDelete(true, 'sentence'),
|
|
18115
|
+
hotkeys: jodit.o.delete.hotkeys.backspaceSentence
|
|
17574
18116
|
});
|
|
17575
18117
|
}
|
|
17576
18118
|
beforeDestruct(jodit) {
|
|
@@ -17590,16 +18132,15 @@ class Delete extends Plugin {
|
|
|
17590
18132
|
jodit.s.removeNode(node);
|
|
17591
18133
|
}
|
|
17592
18134
|
}
|
|
17593
|
-
onDelete(backspace,
|
|
17594
|
-
|
|
17595
|
-
const sel =
|
|
18135
|
+
onDelete(backspace, mode = 'char') {
|
|
18136
|
+
const jodit = this.j;
|
|
18137
|
+
const sel = jodit.selection;
|
|
17596
18138
|
if (!sel.isFocused()) {
|
|
17597
18139
|
sel.focus();
|
|
17598
18140
|
}
|
|
17599
|
-
if (
|
|
18141
|
+
if (checkNotCollapsed(jodit)) {
|
|
17600
18142
|
return false;
|
|
17601
18143
|
}
|
|
17602
|
-
const jodit = this.j;
|
|
17603
18144
|
const range = sel.range;
|
|
17604
18145
|
const fakeNode = jodit.createInside.text(constants.INVISIBLE_SPACE);
|
|
17605
18146
|
try {
|
|
@@ -17607,15 +18148,9 @@ class Delete extends Plugin {
|
|
|
17607
18148
|
if (!dom/* Dom.isOrContains */.i.isOrContains(jodit.editor, fakeNode)) {
|
|
17608
18149
|
return;
|
|
17609
18150
|
}
|
|
17610
|
-
normalizeCursorPosition(fakeNode, backspace);
|
|
17611
|
-
if (
|
|
17612
|
-
|
|
17613
|
-
this.checkTableCell(fakeNode) ||
|
|
17614
|
-
this.checkRemoveEmptyParent(fakeNode, backspace) ||
|
|
17615
|
-
this.checkRemoveEmptyNeighbor(fakeNode, backspace) ||
|
|
17616
|
-
this.checkJoinTwoLists(fakeNode, backspace) ||
|
|
17617
|
-
this.checkJoinNeighbors(fakeNode, backspace) ||
|
|
17618
|
-
this.checkRewrapListItem(fakeNode, backspace)) {
|
|
18151
|
+
normalizeCursorPosition(jodit, fakeNode, backspace);
|
|
18152
|
+
if (cases.some((func) => (0,helpers.isFunction)(func) &&
|
|
18153
|
+
func(jodit, fakeNode, backspace, mode))) {
|
|
17619
18154
|
return false;
|
|
17620
18155
|
}
|
|
17621
18156
|
}
|
|
@@ -17628,261 +18163,6 @@ class Delete extends Plugin {
|
|
|
17628
18163
|
}
|
|
17629
18164
|
return false;
|
|
17630
18165
|
}
|
|
17631
|
-
checkNotCollapsed() {
|
|
17632
|
-
const jodit = this.j;
|
|
17633
|
-
if (!jodit.s.isCollapsed()) {
|
|
17634
|
-
jodit.execCommand('Delete');
|
|
17635
|
-
return true;
|
|
17636
|
-
}
|
|
17637
|
-
}
|
|
17638
|
-
checkRemoveChar(fakeNode, backspace, block) {
|
|
17639
|
-
var _a, _b, _c;
|
|
17640
|
-
const step = backspace ? -1 : 1;
|
|
17641
|
-
const anotherSibling = getSibling(fakeNode, !backspace);
|
|
17642
|
-
let sibling = getSibling(fakeNode, backspace), removeNeighbor = null;
|
|
17643
|
-
let charRemoved = false, removed;
|
|
17644
|
-
while (sibling && (dom/* Dom.isText */.i.isText(sibling) || dom/* Dom.isInlineBlock */.i.isInlineBlock(sibling))) {
|
|
17645
|
-
while (dom/* Dom.isInlineBlock */.i.isInlineBlock(sibling)) {
|
|
17646
|
-
sibling = (backspace ? sibling === null || sibling === void 0 ? void 0 : sibling.lastChild : sibling === null || sibling === void 0 ? void 0 : sibling.firstChild);
|
|
17647
|
-
}
|
|
17648
|
-
if (!sibling) {
|
|
17649
|
-
break;
|
|
17650
|
-
}
|
|
17651
|
-
if ((_a = sibling.nodeValue) === null || _a === void 0 ? void 0 : _a.length) {
|
|
17652
|
-
let value = (0,helpers.toArray)(sibling.nodeValue);
|
|
17653
|
-
const length = value.length;
|
|
17654
|
-
let index = backspace ? length - 1 : 0;
|
|
17655
|
-
if (value[index] === constants.INVISIBLE_SPACE) {
|
|
17656
|
-
while (value[index] === constants.INVISIBLE_SPACE) {
|
|
17657
|
-
index += step;
|
|
17658
|
-
}
|
|
17659
|
-
}
|
|
17660
|
-
removed = value[index];
|
|
17661
|
-
if (value[index + step] === constants.INVISIBLE_SPACE) {
|
|
17662
|
-
index += step;
|
|
17663
|
-
while (value[index] === constants.INVISIBLE_SPACE) {
|
|
17664
|
-
index += step;
|
|
17665
|
-
}
|
|
17666
|
-
index += backspace ? 1 : -1;
|
|
17667
|
-
}
|
|
17668
|
-
if (backspace && index < 0) {
|
|
17669
|
-
value = [];
|
|
17670
|
-
}
|
|
17671
|
-
else {
|
|
17672
|
-
value = value.slice(backspace ? 0 : index + 1, backspace ? index : length);
|
|
17673
|
-
}
|
|
17674
|
-
if (!anotherSibling ||
|
|
17675
|
-
!dom/* Dom.isText */.i.isText(anotherSibling) ||
|
|
17676
|
-
(!backspace ? / $/ : /^ /).test((_b = anotherSibling.nodeValue) !== null && _b !== void 0 ? _b : '') ||
|
|
17677
|
-
!(0,helpers.trimInv)(anotherSibling.nodeValue || '').length) {
|
|
17678
|
-
for (let i = backspace ? value.length - 1 : 0; backspace ? i >= 0 : i < value.length; i += backspace ? -1 : 1) {
|
|
17679
|
-
if (value[i] === ' ') {
|
|
17680
|
-
value[i] = constants.NBSP_SPACE;
|
|
17681
|
-
}
|
|
17682
|
-
else {
|
|
17683
|
-
break;
|
|
17684
|
-
}
|
|
17685
|
-
}
|
|
17686
|
-
}
|
|
17687
|
-
sibling.nodeValue = value.join('');
|
|
17688
|
-
}
|
|
17689
|
-
if (!((_c = sibling.nodeValue) === null || _c === void 0 ? void 0 : _c.length)) {
|
|
17690
|
-
removeNeighbor = sibling;
|
|
17691
|
-
}
|
|
17692
|
-
if (!(0,helpers.isVoid)(removed) && removed !== constants.INVISIBLE_SPACE) {
|
|
17693
|
-
charRemoved = true;
|
|
17694
|
-
(0,helpers.call)(backspace ? dom/* Dom.after */.i.after : dom/* Dom.before */.i.before, sibling, fakeNode);
|
|
17695
|
-
if (block) {
|
|
17696
|
-
while (this.checkRemoveChar(fakeNode, backspace, false)) { }
|
|
17697
|
-
}
|
|
17698
|
-
break;
|
|
17699
|
-
}
|
|
17700
|
-
let nextSibling = getSibling(sibling, backspace);
|
|
17701
|
-
if (!nextSibling &&
|
|
17702
|
-
sibling.parentNode &&
|
|
17703
|
-
sibling.parentNode !== this.root) {
|
|
17704
|
-
nextSibling = findMostNestedNeighbor(sibling, !backspace, this.root, true);
|
|
17705
|
-
}
|
|
17706
|
-
if (removeNeighbor) {
|
|
17707
|
-
dom/* Dom.safeRemove */.i.safeRemove(removeNeighbor);
|
|
17708
|
-
removeNeighbor = null;
|
|
17709
|
-
}
|
|
17710
|
-
sibling = nextSibling;
|
|
17711
|
-
}
|
|
17712
|
-
if (charRemoved) {
|
|
17713
|
-
this.removeEmptyInlineParent(fakeNode);
|
|
17714
|
-
this.addBRInsideEmptyBlock(fakeNode);
|
|
17715
|
-
this.j.s.setCursorBefore(fakeNode);
|
|
17716
|
-
}
|
|
17717
|
-
return charRemoved || undefined;
|
|
17718
|
-
}
|
|
17719
|
-
removeEmptyInlineParent(node) {
|
|
17720
|
-
let parent = node.parentElement;
|
|
17721
|
-
while (parent && dom/* Dom.isInlineBlock */.i.isInlineBlock(parent)) {
|
|
17722
|
-
const p = parent.parentElement;
|
|
17723
|
-
if (dom/* Dom.isEmpty */.i.isEmpty(parent)) {
|
|
17724
|
-
dom/* Dom.after */.i.after(parent, node);
|
|
17725
|
-
dom/* Dom.safeRemove */.i.safeRemove(parent);
|
|
17726
|
-
}
|
|
17727
|
-
parent = p;
|
|
17728
|
-
}
|
|
17729
|
-
}
|
|
17730
|
-
addBRInsideEmptyBlock(node) {
|
|
17731
|
-
if (node.parentElement !== this.root &&
|
|
17732
|
-
dom/* Dom.isBlock */.i.isBlock(node.parentElement) &&
|
|
17733
|
-
dom/* Dom.each */.i.each(node.parentElement, dom/* Dom.isEmptyTextNode */.i.isEmptyTextNode)) {
|
|
17734
|
-
dom/* Dom.after */.i.after(node, this.j.createInside.element('br'));
|
|
17735
|
-
}
|
|
17736
|
-
}
|
|
17737
|
-
checkRemoveInseparableElement(fakeNode, backspace) {
|
|
17738
|
-
const neighbor = dom/* Dom.findSibling */.i.findSibling(fakeNode, backspace);
|
|
17739
|
-
if (dom/* Dom.isElement */.i.isElement(neighbor) &&
|
|
17740
|
-
(dom/* Dom.isTag */.i.isTag(neighbor, constants.INSEPARABLE_TAGS) ||
|
|
17741
|
-
dom/* Dom.isEmpty */.i.isEmpty(neighbor) ||
|
|
17742
|
-
(0,helpers.attr)(neighbor, 'contenteditable') === 'false')) {
|
|
17743
|
-
dom/* Dom.safeRemove */.i.safeRemove(neighbor);
|
|
17744
|
-
this.j.s.setCursorBefore(fakeNode);
|
|
17745
|
-
if (dom/* Dom.isTag */.i.isTag(neighbor, 'br')) {
|
|
17746
|
-
this.checkRemoveEmptyParent(fakeNode, backspace);
|
|
17747
|
-
}
|
|
17748
|
-
return true;
|
|
17749
|
-
}
|
|
17750
|
-
}
|
|
17751
|
-
checkTableCell(fakeNode) {
|
|
17752
|
-
const cell = fakeNode.parentElement;
|
|
17753
|
-
if (dom/* Dom.isCell */.i.isCell(cell)) {
|
|
17754
|
-
return true;
|
|
17755
|
-
}
|
|
17756
|
-
}
|
|
17757
|
-
checkRemoveEmptyParent(fakeNode, backspace) {
|
|
17758
|
-
let found = false;
|
|
17759
|
-
const { setCursorBefore, setCursorIn } = this.j.s;
|
|
17760
|
-
let prn = dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, this.root);
|
|
17761
|
-
if (!prn || !dom/* Dom.isEmpty */.i.isEmpty(prn)) {
|
|
17762
|
-
return;
|
|
17763
|
-
}
|
|
17764
|
-
const neighbor = findNotEmptyNeighbor(fakeNode, backspace, this.root);
|
|
17765
|
-
do {
|
|
17766
|
-
if (prn && dom/* Dom.isEmpty */.i.isEmpty(prn) && !dom/* Dom.isCell */.i.isCell(prn)) {
|
|
17767
|
-
dom/* Dom.after */.i.after(prn, fakeNode);
|
|
17768
|
-
const tmp = dom/* Dom.closest */.i.closest(prn, n => dom/* Dom.isElement */.i.isElement(n) && n !== prn, this.root);
|
|
17769
|
-
dom/* Dom.safeRemove */.i.safeRemove(prn);
|
|
17770
|
-
found = true;
|
|
17771
|
-
prn = tmp;
|
|
17772
|
-
}
|
|
17773
|
-
else {
|
|
17774
|
-
break;
|
|
17775
|
-
}
|
|
17776
|
-
} while (prn);
|
|
17777
|
-
if (found && this.checkJoinTwoLists(fakeNode, backspace)) {
|
|
17778
|
-
return true;
|
|
17779
|
-
}
|
|
17780
|
-
if (neighbor &&
|
|
17781
|
-
!dom/* Dom.isText */.i.isText(neighbor) &&
|
|
17782
|
-
!dom/* Dom.isTag */.i.isTag(neighbor, constants.INSEPARABLE_TAGS)) {
|
|
17783
|
-
setCursorIn(neighbor, !backspace);
|
|
17784
|
-
}
|
|
17785
|
-
else {
|
|
17786
|
-
setCursorBefore(fakeNode);
|
|
17787
|
-
}
|
|
17788
|
-
return found || undefined;
|
|
17789
|
-
}
|
|
17790
|
-
checkJoinTwoLists(fakeNode, backspace) {
|
|
17791
|
-
const next = dom/* Dom.findSibling */.i.findSibling(fakeNode, backspace), prev = dom/* Dom.findSibling */.i.findSibling(fakeNode, !backspace);
|
|
17792
|
-
if (!dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, this.root) &&
|
|
17793
|
-
dom/* Dom.isTag */.i.isTag(next, ['ul', 'ol']) &&
|
|
17794
|
-
dom/* Dom.isTag */.i.isTag(prev, ['ul', 'ol']) &&
|
|
17795
|
-
dom/* Dom.isTag */.i.isTag(next.lastElementChild, 'li') &&
|
|
17796
|
-
dom/* Dom.isTag */.i.isTag(prev.firstElementChild, 'li')) {
|
|
17797
|
-
const { setCursorBefore, setCursorAfter } = this.j.s;
|
|
17798
|
-
const target = next.lastElementChild, second = prev.firstElementChild;
|
|
17799
|
-
(0,helpers.call)(!backspace ? dom/* Dom.append */.i.append : dom/* Dom.prepend */.i.prepend, second, fakeNode);
|
|
17800
|
-
dom/* Dom.moveContent */.i.moveContent(prev, next, !backspace);
|
|
17801
|
-
dom/* Dom.safeRemove */.i.safeRemove(prev);
|
|
17802
|
-
(0,helpers.call)(backspace ? dom/* Dom.append */.i.append : dom/* Dom.prepend */.i.prepend, target, fakeNode);
|
|
17803
|
-
(0,helpers.call)(backspace ? setCursorBefore : setCursorAfter, fakeNode);
|
|
17804
|
-
return true;
|
|
17805
|
-
}
|
|
17806
|
-
}
|
|
17807
|
-
checkRemoveEmptyNeighbor(fakeNode, backspace) {
|
|
17808
|
-
const parent = dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, this.root);
|
|
17809
|
-
if (!parent) {
|
|
17810
|
-
return;
|
|
17811
|
-
}
|
|
17812
|
-
const neighbor = findNotEmptySibling(parent, backspace);
|
|
17813
|
-
if (neighbor && dom/* Dom.isEmpty */.i.isEmpty(neighbor)) {
|
|
17814
|
-
dom/* Dom.safeRemove */.i.safeRemove(neighbor);
|
|
17815
|
-
this.j.s.setCursorBefore(fakeNode);
|
|
17816
|
-
return true;
|
|
17817
|
-
}
|
|
17818
|
-
}
|
|
17819
|
-
checkJoinNeighbors(fakeNode, backspace) {
|
|
17820
|
-
const { jodit } = this;
|
|
17821
|
-
let nextBox = fakeNode, mainClosestBox = nextBox;
|
|
17822
|
-
while (nextBox &&
|
|
17823
|
-
!findNotEmptySibling(nextBox, backspace) &&
|
|
17824
|
-
nextBox.parentElement !== this.root) {
|
|
17825
|
-
nextBox = nextBox.parentElement;
|
|
17826
|
-
mainClosestBox = nextBox;
|
|
17827
|
-
}
|
|
17828
|
-
if (dom/* Dom.isElement */.i.isElement(mainClosestBox)) {
|
|
17829
|
-
const sibling = findNotEmptySibling(mainClosestBox, backspace);
|
|
17830
|
-
if (sibling &&
|
|
17831
|
-
(this.checkMoveListContent(mainClosestBox, sibling, backspace) ||
|
|
17832
|
-
this.moveContentAndRemoveEmpty(mainClosestBox, sibling, backspace))) {
|
|
17833
|
-
jodit.s.setCursorBefore(fakeNode);
|
|
17834
|
-
return true;
|
|
17835
|
-
}
|
|
17836
|
-
}
|
|
17837
|
-
}
|
|
17838
|
-
checkMoveListContent(mainClosestBox, sibling, backspace) {
|
|
17839
|
-
const { jodit } = this;
|
|
17840
|
-
const siblingIsList = dom/* Dom.isTag */.i.isTag(sibling, ['ol', 'ul']);
|
|
17841
|
-
const boxIsList = dom/* Dom.isTag */.i.isTag(mainClosestBox, ['ol', 'ul']);
|
|
17842
|
-
const elementChild = (elm, side) => side ? elm.firstElementChild : elm.lastElementChild;
|
|
17843
|
-
if (boxIsList) {
|
|
17844
|
-
sibling = jodit.createInside.element(jodit.o.enterBlock);
|
|
17845
|
-
dom/* Dom.before */.i.before(mainClosestBox, sibling);
|
|
17846
|
-
return this.moveContentAndRemoveEmpty(elementChild(mainClosestBox, backspace), sibling, backspace);
|
|
17847
|
-
}
|
|
17848
|
-
if (sibling && siblingIsList && !boxIsList) {
|
|
17849
|
-
return this.moveContentAndRemoveEmpty(mainClosestBox, elementChild(sibling, !backspace), backspace);
|
|
17850
|
-
}
|
|
17851
|
-
return false;
|
|
17852
|
-
}
|
|
17853
|
-
moveContentAndRemoveEmpty(mainClosestBox, sibling, backspace) {
|
|
17854
|
-
if (mainClosestBox && dom/* Dom.isElement */.i.isElement(sibling)) {
|
|
17855
|
-
dom/* Dom.moveContent */.i.moveContent(mainClosestBox, sibling, !backspace);
|
|
17856
|
-
let remove = mainClosestBox;
|
|
17857
|
-
while (remove && remove !== this.root && dom/* Dom.isEmpty */.i.isEmpty(remove)) {
|
|
17858
|
-
const parent = remove.parentElement;
|
|
17859
|
-
dom/* Dom.safeRemove */.i.safeRemove(remove);
|
|
17860
|
-
remove = parent;
|
|
17861
|
-
}
|
|
17862
|
-
return true;
|
|
17863
|
-
}
|
|
17864
|
-
return false;
|
|
17865
|
-
}
|
|
17866
|
-
checkRewrapListItem(fakeNode, backspace) {
|
|
17867
|
-
var _a;
|
|
17868
|
-
if (backspace) {
|
|
17869
|
-
const li = dom/* Dom.closest */.i.closest(fakeNode, dom/* Dom.isElement */.i.isElement, this.root);
|
|
17870
|
-
if (dom/* Dom.isTag */.i.isTag(li, 'li') &&
|
|
17871
|
-
((_a = li === null || li === void 0 ? void 0 : li.parentElement) === null || _a === void 0 ? void 0 : _a.firstElementChild) === li &&
|
|
17872
|
-
this.j.s.cursorInTheEdge(true, li)) {
|
|
17873
|
-
const ul = li.parentElement;
|
|
17874
|
-
const p = this.j.createInside.element(this.j.o.enterBlock);
|
|
17875
|
-
dom/* Dom.before */.i.before(ul, p);
|
|
17876
|
-
dom/* Dom.moveContent */.i.moveContent(li, p);
|
|
17877
|
-
dom/* Dom.safeRemove */.i.safeRemove(li);
|
|
17878
|
-
if (dom/* Dom.isEmpty */.i.isEmpty(ul)) {
|
|
17879
|
-
dom/* Dom.safeRemove */.i.safeRemove(ul);
|
|
17880
|
-
}
|
|
17881
|
-
this.j.s.setCursorBefore(fakeNode);
|
|
17882
|
-
return true;
|
|
17883
|
-
}
|
|
17884
|
-
}
|
|
17885
|
-
}
|
|
17886
18166
|
safeRemoveEmptyNode(fakeNode) {
|
|
17887
18167
|
var _a, _b;
|
|
17888
18168
|
const { range } = this.j.s;
|
|
@@ -18791,7 +19071,7 @@ class paste extends Plugin {
|
|
|
18791
19071
|
const keep = (0,ui_button/* Button */.zx)(this.j, {
|
|
18792
19072
|
text: 'Keep',
|
|
18793
19073
|
name: 'keep',
|
|
18794
|
-
|
|
19074
|
+
variant: 'primary',
|
|
18795
19075
|
tabIndex: 0
|
|
18796
19076
|
});
|
|
18797
19077
|
const clear = (0,ui_button/* Button */.zx)(this.j, {
|
|
@@ -21109,6 +21389,10 @@ class imageProperties extends Plugin {
|
|
|
21109
21389
|
return;
|
|
21110
21390
|
}
|
|
21111
21391
|
if (editor.o.image.openOnDblClick) {
|
|
21392
|
+
if (this.j.e.fire('openOnDblClick', image) ===
|
|
21393
|
+
false) {
|
|
21394
|
+
return;
|
|
21395
|
+
}
|
|
21112
21396
|
self.state.image = image;
|
|
21113
21397
|
if (!editor.o.readonly) {
|
|
21114
21398
|
e.stopImmediatePropagation();
|
|
@@ -21381,12 +21665,12 @@ config/* Config.prototype.toolbarInlineForSelection */.D.prototype.toolbarInline
|
|
|
21381
21665
|
config/* Config.prototype.toolbarInlineDisableFor */.D.prototype.toolbarInlineDisableFor = [];
|
|
21382
21666
|
config/* Config.prototype.toolbarInlineDisabledButtons */.D.prototype.toolbarInlineDisabledButtons = ['source'];
|
|
21383
21667
|
config/* Config.prototype.popup */.D.prototype.popup = {
|
|
21384
|
-
a: __webpack_require__(49)/* ["default"] */ .Z,
|
|
21385
|
-
img: __webpack_require__(50)/* ["default"] */ .Z,
|
|
21386
|
-
cells: __webpack_require__(51)/* ["default"] */ .Z,
|
|
21387
|
-
toolbar: __webpack_require__(52)/* ["default"] */ .Z,
|
|
21388
|
-
jodit: __webpack_require__(53)/* ["default"] */ .Z,
|
|
21389
|
-
'jodit-media': __webpack_require__(53)/* ["default"] */ .Z,
|
|
21668
|
+
a: (__webpack_require__(49)/* ["default"] */ .Z),
|
|
21669
|
+
img: (__webpack_require__(50)/* ["default"] */ .Z),
|
|
21670
|
+
cells: (__webpack_require__(51)/* ["default"] */ .Z),
|
|
21671
|
+
toolbar: (__webpack_require__(52)/* ["default"] */ .Z),
|
|
21672
|
+
jodit: (__webpack_require__(53)/* ["default"] */ .Z),
|
|
21673
|
+
'jodit-media': (__webpack_require__(53)/* ["default"] */ .Z),
|
|
21390
21674
|
selection: [
|
|
21391
21675
|
'bold',
|
|
21392
21676
|
'underline',
|
|
@@ -21902,13 +22186,13 @@ const formTemplate = (editor) => {
|
|
|
21902
22186
|
new ui_form/* UIBlock */.eC(editor, [
|
|
21903
22187
|
new ui_button/* UIButton */.y3(editor, {
|
|
21904
22188
|
name: 'unlink',
|
|
21905
|
-
|
|
22189
|
+
variant: 'default',
|
|
21906
22190
|
text: 'Unlink'
|
|
21907
22191
|
}),
|
|
21908
22192
|
new ui_button/* UIButton */.y3(editor, {
|
|
21909
22193
|
name: 'insert',
|
|
21910
22194
|
type: 'submit',
|
|
21911
|
-
|
|
22195
|
+
variant: 'primary',
|
|
21912
22196
|
text: 'Insert'
|
|
21913
22197
|
})
|
|
21914
22198
|
], {
|
|
@@ -23140,10 +23424,11 @@ class resizer extends Plugin {
|
|
|
23140
23424
|
return (0,helpers.offset)((this.rect.parentNode || this.j.od.documentElement), this.j, this.j.od, true);
|
|
23141
23425
|
}
|
|
23142
23426
|
applySize(element, key, value) {
|
|
23143
|
-
|
|
23427
|
+
const changeAttrs = dom/* Dom.isImage */.i.isImage(element) && this.j.o.resizer.forImageChangeAttributes;
|
|
23428
|
+
if (changeAttrs) {
|
|
23144
23429
|
(0,helpers.attr)(element, key, value);
|
|
23145
23430
|
}
|
|
23146
|
-
|
|
23431
|
+
if (!changeAttrs || element.style[key]) {
|
|
23147
23432
|
(0,helpers.css)(element, key, value);
|
|
23148
23433
|
}
|
|
23149
23434
|
}
|
|
@@ -24214,6 +24499,9 @@ class AceEditor extends SourceEditor {
|
|
|
24214
24499
|
constructor() {
|
|
24215
24500
|
super(...arguments);
|
|
24216
24501
|
this.className = 'jodit_ace_editor';
|
|
24502
|
+
this.proxyOnBlur = (e) => {
|
|
24503
|
+
this.j.e.fire('blur', e);
|
|
24504
|
+
};
|
|
24217
24505
|
this.proxyOnFocus = (e) => {
|
|
24218
24506
|
this.j.e.fire('focus', e);
|
|
24219
24507
|
};
|
|
@@ -24289,6 +24577,7 @@ class AceEditor extends SourceEditor {
|
|
|
24289
24577
|
this.instance.on('change', this.toWYSIWYG);
|
|
24290
24578
|
this.instance.on('focus', this.proxyOnFocus);
|
|
24291
24579
|
this.instance.on('mousedown', this.proxyOnMouseDown);
|
|
24580
|
+
this.instance.on('blur', this.proxyOnBlur);
|
|
24292
24581
|
if (editor.getRealMode() !== constants.MODE_WYSIWYG) {
|
|
24293
24582
|
this.setValue(this.getValue());
|
|
24294
24583
|
}
|
|
@@ -24429,6 +24718,14 @@ function createSourceEditor(type, editor, container, toWYSIWYG, fromWYSIWYG) {
|
|
|
24429
24718
|
return sourceEditor;
|
|
24430
24719
|
}
|
|
24431
24720
|
|
|
24721
|
+
;// CONCATENATED MODULE: ./src/plugins/source/const.ts
|
|
24722
|
+
/*!
|
|
24723
|
+
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
24724
|
+
* Released under MIT see LICENSE.txt in the project root for license information.
|
|
24725
|
+
* Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net
|
|
24726
|
+
*/
|
|
24727
|
+
const SOURCE_CONSUMER = 'source-consumer';
|
|
24728
|
+
|
|
24432
24729
|
;// CONCATENATED MODULE: ./src/plugins/source/source.ts
|
|
24433
24730
|
/*!
|
|
24434
24731
|
* Jodit Editor (https://xdsoft.net/jodit/)
|
|
@@ -24444,6 +24741,7 @@ function createSourceEditor(type, editor, container, toWYSIWYG, fromWYSIWYG) {
|
|
|
24444
24741
|
|
|
24445
24742
|
|
|
24446
24743
|
|
|
24744
|
+
|
|
24447
24745
|
class source extends Plugin {
|
|
24448
24746
|
constructor() {
|
|
24449
24747
|
super(...arguments);
|
|
@@ -24479,7 +24777,7 @@ class source extends Plugin {
|
|
|
24479
24777
|
fromWYSIWYG(force = false) {
|
|
24480
24778
|
if (!this.__lock || force === true) {
|
|
24481
24779
|
this.__lock = true;
|
|
24482
|
-
const new_value = this.j.getEditorValue(false);
|
|
24780
|
+
const new_value = this.j.getEditorValue(false, SOURCE_CONSUMER);
|
|
24483
24781
|
if (new_value !== this.getMirrorValue()) {
|
|
24484
24782
|
this.setMirrorValue(new_value);
|
|
24485
24783
|
}
|
|
@@ -24640,7 +24938,7 @@ class source extends Plugin {
|
|
|
24640
24938
|
var _a;
|
|
24641
24939
|
(_a = this.sourceEditor) === null || _a === void 0 ? void 0 : _a.setPlaceHolder(text);
|
|
24642
24940
|
})
|
|
24643
|
-
.on('change.source', this.
|
|
24941
|
+
.on('change.source', this.syncValueFromWYSIWYG)
|
|
24644
24942
|
.on('beautifyHTML', html => html);
|
|
24645
24943
|
if (editor.o.beautifyHTML) {
|
|
24646
24944
|
const addEventListener = () => {
|
|
@@ -24656,9 +24954,16 @@ class source extends Plugin {
|
|
|
24656
24954
|
(0,helpers.loadNext)(editor, editor.o.beautifyHTMLCDNUrlsJS).then(addEventListener);
|
|
24657
24955
|
}
|
|
24658
24956
|
}
|
|
24659
|
-
this.
|
|
24957
|
+
this.syncValueFromWYSIWYG(true);
|
|
24660
24958
|
this.initSourceEditor(editor);
|
|
24661
24959
|
}
|
|
24960
|
+
syncValueFromWYSIWYG(force = false) {
|
|
24961
|
+
const editor = this.j;
|
|
24962
|
+
if (editor.getMode() === constants.MODE_SPLIT ||
|
|
24963
|
+
editor.getMode() === constants.MODE_SOURCE) {
|
|
24964
|
+
this.fromWYSIWYG(force);
|
|
24965
|
+
}
|
|
24966
|
+
}
|
|
24662
24967
|
initSourceEditor(editor) {
|
|
24663
24968
|
var _a;
|
|
24664
24969
|
if (editor.o.sourceEditor !== 'area') {
|
|
@@ -24667,14 +24972,14 @@ class source extends Plugin {
|
|
|
24667
24972
|
var _a, _b;
|
|
24668
24973
|
(_a = this.sourceEditor) === null || _a === void 0 ? void 0 : _a.destruct();
|
|
24669
24974
|
this.sourceEditor = sourceEditor;
|
|
24670
|
-
this.
|
|
24975
|
+
this.syncValueFromWYSIWYG(true);
|
|
24671
24976
|
(_b = editor.events) === null || _b === void 0 ? void 0 : _b.fire('sourceEditorReady', editor);
|
|
24672
24977
|
});
|
|
24673
24978
|
}
|
|
24674
24979
|
else {
|
|
24675
24980
|
(_a = this.sourceEditor) === null || _a === void 0 ? void 0 : _a.onReadyAlways(() => {
|
|
24676
24981
|
var _a;
|
|
24677
|
-
this.
|
|
24982
|
+
this.syncValueFromWYSIWYG(true);
|
|
24678
24983
|
(_a = editor.events) === null || _a === void 0 ? void 0 : _a.fire('sourceEditorReady', editor);
|
|
24679
24984
|
});
|
|
24680
24985
|
}
|
|
@@ -24714,6 +25019,9 @@ class source extends Plugin {
|
|
|
24714
25019
|
(0,tslib_es6/* __decorate */.gn)([
|
|
24715
25020
|
(0,decorators.watch)(':readonly.source')
|
|
24716
25021
|
], source.prototype, "onReadonlyReact", null);
|
|
25022
|
+
(0,tslib_es6/* __decorate */.gn)([
|
|
25023
|
+
decorators.autobind
|
|
25024
|
+
], source.prototype, "syncValueFromWYSIWYG", null);
|
|
24717
25025
|
|
|
24718
25026
|
;// CONCATENATED MODULE: ./src/plugins/source/index.ts
|
|
24719
25027
|
/*!
|
|
@@ -26165,7 +26473,15 @@ class tooltip extends Plugin {
|
|
|
26165
26473
|
|
|
26166
26474
|
config/* Config.prototype.controls.preview */.D.prototype.controls.preview = {
|
|
26167
26475
|
icon: 'eye',
|
|
26168
|
-
|
|
26476
|
+
command: 'preview',
|
|
26477
|
+
mode: constants.MODE_SOURCE + constants.MODE_WYSIWYG,
|
|
26478
|
+
tooltip: 'Preview'
|
|
26479
|
+
};
|
|
26480
|
+
function preview(editor) {
|
|
26481
|
+
editor.registerButton({
|
|
26482
|
+
name: 'preview'
|
|
26483
|
+
});
|
|
26484
|
+
editor.registerCommand('preview', (_, _1, defaultValue) => {
|
|
26169
26485
|
const dialog = editor.getInstance('Dialog', {
|
|
26170
26486
|
language: editor.o.language,
|
|
26171
26487
|
theme: editor.o.theme
|
|
@@ -26175,7 +26491,8 @@ config/* Config.prototype.controls.preview */.D.prototype.controls.preview = {
|
|
|
26175
26491
|
position: 'relative',
|
|
26176
26492
|
padding: 16
|
|
26177
26493
|
});
|
|
26178
|
-
const value =
|
|
26494
|
+
const value = defaultValue ||
|
|
26495
|
+
editor.value ||
|
|
26179
26496
|
`<div style='position: absolute;left:50%;top:50%;transform: translateX(-50%) translateY(-50%);color:#ccc;'>${editor.i18n('Empty')}</div>`;
|
|
26180
26497
|
if (editor.iframe) {
|
|
26181
26498
|
const iframe = editor.create.element('iframe');
|
|
@@ -26198,17 +26515,42 @@ config/* Config.prototype.controls.preview */.D.prototype.controls.preview = {
|
|
|
26198
26515
|
minHeight: 600,
|
|
26199
26516
|
border: 0
|
|
26200
26517
|
});
|
|
26201
|
-
|
|
26202
|
-
|
|
26518
|
+
dialog.setSize(1024, 600).open(div, editor.i18n('Preview'));
|
|
26519
|
+
const setHTML = (box, value) => {
|
|
26520
|
+
const dv = editor.c.div();
|
|
26521
|
+
dv.innerHTML = value;
|
|
26522
|
+
for (let i = 0; i < dv.children.length; i += 1) {
|
|
26523
|
+
const c = dv.children[i];
|
|
26524
|
+
const newNode = document.createElement(c.nodeName);
|
|
26525
|
+
for (let j = 0; j < c.attributes.length; j += 1) {
|
|
26526
|
+
(0,helpers.attr)(newNode, c.attributes[j].nodeName, c.attributes[j].nodeValue);
|
|
26527
|
+
}
|
|
26528
|
+
if (c.children.length === 0) {
|
|
26529
|
+
switch (c.nodeName) {
|
|
26530
|
+
case 'SCRIPT':
|
|
26531
|
+
if (c.textContent) {
|
|
26532
|
+
newNode.textContent = c.textContent;
|
|
26533
|
+
}
|
|
26534
|
+
break;
|
|
26535
|
+
default:
|
|
26536
|
+
if (c.innerHTML) {
|
|
26537
|
+
newNode.innerHTML = c.innerHTML;
|
|
26538
|
+
}
|
|
26539
|
+
break;
|
|
26540
|
+
}
|
|
26541
|
+
}
|
|
26542
|
+
else {
|
|
26543
|
+
setHTML(newNode, c.innerHTML);
|
|
26544
|
+
}
|
|
26545
|
+
try {
|
|
26546
|
+
box.appendChild(newNode);
|
|
26547
|
+
}
|
|
26548
|
+
catch (_a) { }
|
|
26549
|
+
}
|
|
26550
|
+
};
|
|
26551
|
+
setHTML(div, value);
|
|
26203
26552
|
}
|
|
26204
26553
|
dialog.setModal(true);
|
|
26205
|
-
},
|
|
26206
|
-
mode: constants.MODE_SOURCE + constants.MODE_WYSIWYG,
|
|
26207
|
-
tooltip: 'Preview'
|
|
26208
|
-
};
|
|
26209
|
-
function preview(editor) {
|
|
26210
|
-
editor.registerButton({
|
|
26211
|
-
name: 'preview'
|
|
26212
26554
|
});
|
|
26213
26555
|
}
|
|
26214
26556
|
|