From 74a9ef4b5183549573da065127538465edfa092b Mon Sep 17 00:00:00 2001 From: Vanessa Date: Mon, 19 Sep 2022 15:10:11 +0800 Subject: [PATCH] :bug: fix https://github.com/siyuan-note/insider/issues/1055 --- app/src/protyle/toolbar/index.ts | 2 +- app/src/protyle/wysiwyg/keydown.ts | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/src/protyle/toolbar/index.ts b/app/src/protyle/toolbar/index.ts index 90001a95d..de947ccac 100644 --- a/app/src/protyle/toolbar/index.ts +++ b/app/src/protyle/toolbar/index.ts @@ -437,7 +437,7 @@ export class Toolbar { } else if (type === "sup" && types.includes("sub")) { types.find((item, index) => { if (item === "sub") { - types.splice(index, 1) + types.splice(index, 1); if (!this.element.classList.contains("fn__none")) { this.element.querySelector(`[data-type="sub"]`).classList.remove("protyle-toolbar__item--current"); } diff --git a/app/src/protyle/wysiwyg/keydown.ts b/app/src/protyle/wysiwyg/keydown.ts index 440d92fb4..dd69a1d5a 100644 --- a/app/src/protyle/wysiwyg/keydown.ts +++ b/app/src/protyle/wysiwyg/keydown.ts @@ -295,14 +295,24 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => { const start = getSelectionOffset(nodeElement, editorElement, range).start; if (start !== 0) { const editElement = getContenteditableElement(nodeElement); - const firstIndex = editElement.textContent.indexOf("\n"); - if (firstIndex === -1 || start < firstIndex || start === editElement.textContent.replace("\n", " ").indexOf("\n")) { - setFirstNodeRange(editElement, range); - event.stopPropagation(); - event.preventDefault(); - return; + if (editElement.tagName === "TABLE") { + const cellElement = hasClosestByMatchTag(range.startContainer, "TH") || hasClosestByMatchTag(range.startContainer, "TD") || editElement.querySelector("th, td") + if (getSelectionOffset(cellElement, cellElement, range).start !== 0) { + setFirstNodeRange(cellElement, range); + event.stopPropagation(); + event.preventDefault(); + return; + } } else { - return; + const firstIndex = editElement.textContent.indexOf("\n"); + if (firstIndex === -1 || start <= firstIndex || start === editElement.textContent.replace("\n", " ").indexOf("\n")) { + setFirstNodeRange(editElement, range); + event.stopPropagation(); + event.preventDefault(); + return; + } else { + return; + } } } }