leksy-editor 2.2.2 → 2.2.4
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/package.json +1 -1
- package/utilities.js +22 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "leksy-editor",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.4",
|
|
4
4
|
"description": "Leksy Editor is an alternative to traditional WYSIWYG editors, designed primarily for creating mail templates, blogs, and documents without any content manipulation.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"directories": {
|
package/utilities.js
CHANGED
|
@@ -3219,6 +3219,12 @@ const outdentListItem = (li, core) => {
|
|
|
3219
3219
|
}
|
|
3220
3220
|
};
|
|
3221
3221
|
|
|
3222
|
+
const isEmptyLi = (li) => {
|
|
3223
|
+
const text = li.textContent.replace(/\u200B/g, '').trim();
|
|
3224
|
+
const hasOnlySublist = li.children.length === 1 && li.querySelector('ul, ol');
|
|
3225
|
+
return text === '' && !hasOnlySublist;
|
|
3226
|
+
}
|
|
3227
|
+
|
|
3222
3228
|
const makeSublist = (event, core) => {
|
|
3223
3229
|
if (event.key !== 'Tab') return;
|
|
3224
3230
|
|
|
@@ -3247,6 +3253,11 @@ const makeSublist = (event, core) => {
|
|
|
3247
3253
|
|
|
3248
3254
|
if (!selectedLis.length) return;
|
|
3249
3255
|
|
|
3256
|
+
if (!event.shiftKey) {
|
|
3257
|
+
const hasContent = selectedLis.some(li => !isEmptyLi(li));
|
|
3258
|
+
if (hasContent) return;
|
|
3259
|
+
}
|
|
3260
|
+
|
|
3250
3261
|
event.preventDefault();
|
|
3251
3262
|
|
|
3252
3263
|
selectedLis.forEach(li => {
|
|
@@ -3933,12 +3944,12 @@ const handleBackspaceInList = (event, core) => {
|
|
|
3933
3944
|
if (!range.collapsed) return;
|
|
3934
3945
|
|
|
3935
3946
|
let element = range.startContainer;
|
|
3936
|
-
if (element.nodeType === Node.TEXT_NODE)
|
|
3947
|
+
if (element.nodeType === Node.TEXT_NODE) {
|
|
3948
|
+
element = element.parentElement;
|
|
3949
|
+
}
|
|
3937
3950
|
|
|
3938
3951
|
const li = element.closest('li');
|
|
3939
|
-
if (!li) return;
|
|
3940
|
-
|
|
3941
|
-
if (!core.elements.editor.contains(li)) return;
|
|
3952
|
+
if (!li || !core.elements.editor.contains(li)) return;
|
|
3942
3953
|
|
|
3943
3954
|
const nestedList = li.querySelector('ul, ol');
|
|
3944
3955
|
if (!nestedList) return;
|
|
@@ -3981,15 +3992,13 @@ const handleBackspaceInList = (event, core) => {
|
|
|
3981
3992
|
|
|
3982
3993
|
selection.removeAllRanges();
|
|
3983
3994
|
selection.addRange(newRange);
|
|
3995
|
+
}
|
|
3996
|
+
// Case 2: first list item
|
|
3997
|
+
else {
|
|
3998
|
+
const span = document.createElement('span');
|
|
3999
|
+
span.textContent = parentText || '';
|
|
3984
4000
|
|
|
3985
|
-
|
|
3986
|
-
else {newRange.collapse(false);
|
|
3987
|
-
|
|
3988
|
-
// Case 2: first list item
|
|
3989
|
-
const p = document.createElement('p');
|
|
3990
|
-
p.textContent = parentText;
|
|
3991
|
-
|
|
3992
|
-
parentList.parentElement.insertBefore(p, parentList);
|
|
4001
|
+
parentList.parentElement.insertBefore(span, parentList);
|
|
3993
4002
|
|
|
3994
4003
|
if (children.length > 0) {
|
|
3995
4004
|
parentList.insertBefore(fragment, li);
|
|
@@ -3998,7 +4007,7 @@ const handleBackspaceInList = (event, core) => {
|
|
|
3998
4007
|
li.remove();
|
|
3999
4008
|
|
|
4000
4009
|
const newRange = document.createRange();
|
|
4001
|
-
newRange.selectNodeContents(
|
|
4010
|
+
newRange.selectNodeContents(span);
|
|
4002
4011
|
newRange.collapse(true);
|
|
4003
4012
|
|
|
4004
4013
|
selection.removeAllRanges();
|