Parcourir la source

:art: https://github.com/siyuan-note/siyuan/issues/9417

Vanessa il y a 1 an
Parent
commit
7a9a85ea32
2 fichiers modifiés avec 36 ajouts et 9 suppressions
  1. 32 7
      app/src/protyle/render/av/keydown.ts
  2. 4 2
      app/src/protyle/render/av/row.ts

+ 32 - 7
app/src/protyle/render/av/keydown.ts

@@ -1,5 +1,5 @@
 import {matchHotKey} from "../../util/hotKey";
-import {selectRow, updateHeader} from "./row";
+import {selectRow} from "./row";
 import {cellScrollIntoView, popTextCell} from "./cell";
 
 export const avKeydown = (event: KeyboardEvent, nodeElement: HTMLElement, protyle: IProtyle) => {
@@ -87,17 +87,42 @@ export const avKeydown = (event: KeyboardEvent, nodeElement: HTMLElement, protyl
         }
     }
 
-    const selectRowElement = nodeElement.querySelector(".av__row--select:not(.av__row--header)") as HTMLElement;
-    if (selectRowElement) {
+    const selectRowElements = nodeElement.querySelectorAll(".av__row--select:not(.av__row--header)");
+    if (selectRowElements.length > 0) {
         if (event.key === "Escape") {
-            selectRowElement.querySelector(".av__firstcol use").setAttribute("xlink:href", "#iconUncheck");
-            selectRowElement.classList.remove("av__row--select");
-            updateHeader(selectRowElement);
+            selectRow(selectRowElements[0].querySelector(".av__firstcol"), "unselectAll");
+            return true;
+        }
+        if (event.key === "Enter") {
+            selectRow(selectRowElements[0].querySelector(".av__firstcol"), "unselectAll");
+            popTextCell(protyle, [selectRowElements[0].querySelector(".av__cell")]);
+            event.preventDefault();
             return true;
         }
         // event.shiftKey
         if (event.key === "ArrowUp") {
-            return true;
+            const previousRowElement = selectRowElements[0].previousElementSibling
+            selectRow(selectRowElements[0].querySelector(".av__firstcol"), "unselectAll");
+            if (previousRowElement && !previousRowElement.classList.contains("av__row--header")) {
+                selectRow(previousRowElement.querySelector(".av__firstcol"), "select");
+                event.preventDefault();
+                return true;
+            } else {
+                nodeElement.classList.add("protyle-wysiwyg--select")
+                return false
+            }
+        }
+        if (event.key === "ArrowDown") {
+            const nextRowElement = selectRowElements[selectRowElements.length - 1].nextElementSibling
+            selectRow(selectRowElements[0].querySelector(".av__firstcol"), "unselectAll");
+            if (nextRowElement && !nextRowElement.classList.contains("av__row--add")) {
+                selectRow(nextRowElement.querySelector(".av__firstcol"), "select");
+                event.preventDefault();
+                return true;
+            } else {
+                nodeElement.classList.add("protyle-wysiwyg--select")
+                return false
+            }
         }
     }
     return false;

+ 4 - 2
app/src/protyle/render/av/row.ts

@@ -1,9 +1,10 @@
 import {hasClosestBlock} from "../../util/hasClosest";
+import {focusBlock} from "../../util/selection";
 
-export const selectRow = (checkElement: Element, type: "toggle" | "select" | "unselect") => {
+export const selectRow = (checkElement: Element, type: "toggle" | "select" | "unselect" | "unselectAll") => {
     const rowElement = checkElement.parentElement;
     const useElement = checkElement.querySelector("use");
-    if (rowElement.classList.contains("av__row--header")) {
+    if (rowElement.classList.contains("av__row--header") || type === "unselectAll") {
         if ("#iconCheck" === useElement.getAttribute("xlink:href")) {
             rowElement.parentElement.querySelectorAll(".av__firstcol").forEach(item => {
                 item.querySelector("use").setAttribute("xlink:href", "#iconUncheck");
@@ -24,6 +25,7 @@ export const selectRow = (checkElement: Element, type: "toggle" | "select" | "un
             useElement.setAttribute("xlink:href", "#iconUncheck");
         }
     }
+    focusBlock(hasClosestBlock(rowElement) as HTMLElement);
     updateHeader(rowElement);
 }