Vanessa 2023-10-13 13:55:27 +08:00
parent 1815ec1b39
commit 7a9a85ea32
2 changed files with 36 additions and 9 deletions

View file

@ -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;

View file

@ -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);
}