This commit is contained in:
Vanessa 2022-06-27 23:17:10 +08:00
parent e1b45b40e5
commit 1d1f46892f
3 changed files with 30 additions and 15 deletions

View file

@ -536,7 +536,7 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
nodeElement.contains(firstEditElement)
) ||
(!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" ||
protyle.contentElement.scrollTop === 0)) {
protyle.title.editElement.focus();
@ -546,16 +546,19 @@ export const keydown = (protyle: IProtyle, editorElement: HTMLElement) => {
}
}
} 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) {
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();
const selectsElement: HTMLElement[] = Array.from(protyle.wysiwyg.element.querySelectorAll(".protyle-wysiwyg--select"));
if (selectsElement.length < 2) {
return;
return;
}
turnsIntoTransaction({
protyle, selectsElement,

View file

@ -189,7 +189,10 @@ export class Search extends Model {
size: foldResponse.data ? Constants.SIZE_GET_MAX : Constants.SIZE_GET,
}, getResponse => {
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 {
this.protyle = new Protyle(this.element.querySelector("#searchPreview") as HTMLElement, {
@ -201,7 +204,10 @@ export class Search extends Model {
breadcrumbDocName: true,
},
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();
}
}
});
}

View file

@ -648,7 +648,10 @@ const getArticle = (options: {
breadcrumbDocName: true
},
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 {
@ -661,7 +664,10 @@ const getArticle = (options: {
size: foldResponse.data ? Constants.SIZE_GET_MAX : Constants.SIZE_GET,
}, getResponse => {
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();
}
});
}
});