浏览代码

:art: fix https://github.com/siyuan-note/siyuan/issues/11164

Vanessa 1 年之前
父节点
当前提交
cb28d919b6
共有 2 个文件被更改,包括 45 次插入11 次删除
  1. 15 11
      app/src/protyle/wysiwyg/keydown.ts
  2. 30 0
      app/src/protyle/wysiwyg/list.ts

+ 15 - 11
app/src/protyle/wysiwyg/keydown.ts

@@ -33,7 +33,7 @@ import {enter, softEnter} from "./enter";
 import {fixTable} from "../util/table";
 import {turnsIntoOneTransaction, turnsIntoTransaction, updateBatchTransaction, updateTransaction} from "./transaction";
 import {fontEvent} from "../toolbar/Font";
-import {listIndent, listOutdent} from "./list";
+import {addSubList, listIndent, listOutdent} from "./list";
 import {newFileContentBySelect, rename, replaceFileName} from "../../editor/rename";
 import {insertEmptyBlock, jumpToParentNext} from "../../block/util";
 import {isLocalPath} from "../../util/pathName";
@@ -866,16 +866,20 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
         }
 
         // 回车
-        if (!event.altKey && isNotCtrl(event) && event.key === "Enter") {
-            if (!event.shiftKey) {
-                enter(nodeElement, range, protyle);
-                event.stopPropagation();
-                event.preventDefault();
-                return;
-            } else if (nodeElement.getAttribute("data-type") === "NodeAttributeView") {
-                event.stopPropagation();
-                event.preventDefault();
-                return;
+        if (isNotCtrl(event) && event.key === "Enter") {
+            if (event.altKey) {
+                addSubList(protyle, nodeElement, range);
+            } else {
+                if (!event.shiftKey) {
+                    enter(nodeElement, range, protyle);
+                    event.stopPropagation();
+                    event.preventDefault();
+                    return;
+                } else if (nodeElement.getAttribute("data-type") === "NodeAttributeView") {
+                    event.stopPropagation();
+                    event.preventDefault();
+                    return;
+                }
             }
         }
 

+ 30 - 0
app/src/protyle/wysiwyg/list.ts

@@ -4,6 +4,8 @@ import {genEmptyBlock} from "../../block/util";
 import * as dayjs from "dayjs";
 import {Constants} from "../../constants";
 import {moveToPrevious} from "./remove";
+import {hasClosestByClassName} from "../util/hasClosest";
+import {setFold} from "../../menus/protyle";
 
 export const updateListOrder = (listElement: Element, sIndex?: number) => {
     if (listElement.getAttribute("data-subtype") !== "o") {
@@ -42,6 +44,34 @@ export const genListItemElement = (listItemElement: Element, offset = 0, wbr = f
     return element.content.firstElementChild as HTMLElement;
 };
 
+export const addSubList = (protyle: IProtyle, nodeElement: Element, range: Range) => {
+    const parentItemElement = hasClosestByClassName(nodeElement, "li");
+    if (!parentItemElement) {
+        return;
+    }
+    const lastSubItem = parentItemElement.querySelector(".list")?.lastElementChild.previousElementSibling;
+    if (!lastSubItem) {
+        return;
+    }
+    const newListElement = genListItemElement(lastSubItem, 0, true);
+    const id = newListElement.getAttribute("data-node-id");
+    lastSubItem.after(newListElement);
+
+    if (lastSubItem.parentElement.getAttribute("fold") === "1") {
+        setFold(protyle, lastSubItem.parentElement, true);
+    }
+    transaction(protyle, [{
+        action: "insert",
+        id,
+        data: newListElement.outerHTML,
+        previousID: lastSubItem.getAttribute("data-node-id"),
+    }], [{
+        action: "delete",
+        id,
+    }]);
+    focusByWbr(newListElement, range);
+};
+
 export const listIndent = (protyle: IProtyle, liItemElements: Element[], range: Range) => {
     const previousElement = liItemElements[0].previousElementSibling as HTMLElement;
     if (!previousElement) {