Prechádzať zdrojové kódy

:bug: fix https://github.com/siyuan-note/siyuan/issues/5304

Vanessa 3 rokov pred
rodič
commit
1d1f46892f

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

@@ -536,7 +536,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
                         nodeElement.contains(firstEditElement)
                         nodeElement.contains(firstEditElement)
                     ) ||
                     ) ||
                     (!firstEditElement && nodeElement.isSameNode(protyle.wysiwyg.element.firstElementChild))) {
                     (!firstEditElement && nodeElement.isSameNode(protyle.wysiwyg.element.firstElementChild))) {
-                    if (nodeElement.textContent.substr(0, getSelectionOffset(nodeElement, protyle.wysiwyg.element, range).end).indexOf("\n") === -1) {
+                    if (nodeElement.textContent.substr(0, position.end).indexOf("\n") === -1) {
                         if (protyle.title && (protyle.wysiwyg.element.firstElementChild.getAttribute("data-eof") === "true" ||
                         if (protyle.title && (protyle.wysiwyg.element.firstElementChild.getAttribute("data-eof") === "true" ||
                             protyle.contentElement.scrollTop === 0)) {
                             protyle.contentElement.scrollTop === 0)) {
                             protyle.title.editElement.focus();
                             protyle.title.editElement.focus();
@@ -546,16 +546,19 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
                         }
                         }
                     }
                     }
                 } else {
                 } else {
-                    let previousElement: HTMLElement = getPreviousBlock(nodeElement) as HTMLElement;
-                    if (previousElement) {
-                        previousElement = getLastBlock(previousElement) as HTMLElement;
+                    // 遇到折叠块
+                    if (nodeElement.textContent.substr(0, position.end).indexOf("\n") === -1) {
+                        let previousElement: HTMLElement = getPreviousBlock(nodeElement) as HTMLElement;
                         if (previousElement) {
                         if (previousElement) {
-                            previousElement = hasClosestByAttribute(previousElement, "fold", "1") as HTMLElement;
-                            if (previousElement && previousElement.getAttribute("data-type") !== "NodeListItem") {
-                                // 遇到折叠块
-                                focusBlock(previousElement, undefined, true);
-                                event.stopPropagation();
-                                event.preventDefault();
+                            previousElement = getLastBlock(previousElement) as HTMLElement;
+                            if (previousElement) {
+                                previousElement = hasClosestByAttribute(previousElement, "fold", "1") as HTMLElement;
+                                if (previousElement && previousElement.getAttribute("data-type") !== "NodeListItem") {
+                                    previousElement.scrollTop = 0;
+                                    focusBlock(previousElement, undefined, true);
+                                    event.stopPropagation();
+                                    event.preventDefault();
+                                }
                             }
                             }
                         }
                         }
                     }
                     }
@@ -1325,7 +1328,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
             event.preventDefault();
             event.preventDefault();
             const selectsElement: HTMLElement[] = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select"));
             const selectsElement: HTMLElement[] = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select"));
             if (selectsElement.length < 2) {
             if (selectsElement.length < 2) {
-              return;
+                return;
             }
             }
             turnsIntoTransaction({
             turnsIntoTransaction({
                 protyle, selectsElement,
                 protyle, selectsElement,

+ 8 - 2
app/src/search/index.ts

@@ -189,7 +189,10 @@ export class Search extends Model {
                     size: foldResponse.data ? Constants.SIZE_GET_MAX : Constants.SIZE_GET,
                     size: foldResponse.data ? Constants.SIZE_GET_MAX : Constants.SIZE_GET,
                 }, getResponse => {
                 }, getResponse => {
                     onGet(getResponse, this.protyle.protyle, foldResponse.data ? [Constants.CB_GET_ALL] : [Constants.CB_GET_HL]);
                     onGet(getResponse, this.protyle.protyle, foldResponse.data ? [Constants.CB_GET_ALL] : [Constants.CB_GET_HL]);
-                    this.protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${id}"] span[data-type="search-mark"]`).scrollIntoView();
+                    const matchElement = this.protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${id}"] span[data-type="search-mark"]`)
+                    if (matchElement) {
+                        matchElement.scrollIntoView();
+                    }
                 });
                 });
             } else {
             } else {
                 this.protyle = new Protyle(this.element.querySelector("#searchPreview") as HTMLElement, {
                 this.protyle = new Protyle(this.element.querySelector("#searchPreview") as HTMLElement, {
@@ -201,7 +204,10 @@ export class Search extends Model {
                         breadcrumbDocName: true,
                         breadcrumbDocName: true,
                     },
                     },
                     after: () => {
                     after: () => {
-                        this.protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${id}"] span[data-type="search-mark"]`).scrollIntoView();
+                        const matchElement = this.protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${id}"] span[data-type="search-mark"]`)
+                        if (matchElement) {
+                            matchElement.scrollIntoView();
+                        }
                     }
                     }
                 });
                 });
             }
             }

+ 8 - 2
app/src/search/spread.ts

@@ -648,7 +648,10 @@ const getArticle = (options: {
                     breadcrumbDocName: true
                     breadcrumbDocName: true
                 },
                 },
                 after: () => {
                 after: () => {
-                    protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${options.id}"] span[data-type="search-mark"]`).scrollIntoView();
+                    const matchElement = protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${options.id}"] span[data-type="search-mark"]`)
+                    if (matchElement) {
+                        matchElement.scrollIntoView();
+                    }
                 }
                 }
             });
             });
         } else {
         } else {
@@ -661,7 +664,10 @@ const getArticle = (options: {
                 size: foldResponse.data ? Constants.SIZE_GET_MAX : Constants.SIZE_GET,
                 size: foldResponse.data ? Constants.SIZE_GET_MAX : Constants.SIZE_GET,
             }, getResponse => {
             }, getResponse => {
                 onGet(getResponse, protyle.protyle, foldResponse.data ? [Constants.CB_GET_ALL] : [Constants.CB_GET_HL]);
                 onGet(getResponse, protyle.protyle, foldResponse.data ? [Constants.CB_GET_ALL] : [Constants.CB_GET_HL]);
-                protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${options.id}"] span[data-type="search-mark"]`).scrollIntoView();
+                const matchElement = protyle.protyle.wysiwyg.element.querySelector(`div[data-node-id="${options.id}"] span[data-type="search-mark"]`)
+                if (matchElement) {
+                    matchElement.scrollIntoView();
+                }
             });
             });
         }
         }
     });
     });