Vanessa 2022-08-08 10:42:07 +08:00
parent b5b46afabd
commit f742e664c7
4 changed files with 30 additions and 40 deletions

View file

@ -312,6 +312,24 @@ export class Wnd {
}
});
const initData = currentTab.headElement.getAttribute("data-initdata")
if (initData) {
const json = JSON.parse(initData);
currentTab.addModel(new Editor({
tab: currentTab,
blockId: json.blockId,
mode: json.mode,
action: [json.action],
scrollAttr: json.scrollAttr,
}));
currentTab.headElement.removeAttribute("data-initdata");
return;
}
if (currentTab && target === currentTab.headElement && currentTab.model instanceof Graph) {
currentTab.model.onGraph(false);
}
if (currentTab && currentTab.model instanceof Editor) {
const keepCursorId = currentTab.headElement.getAttribute("keep-cursor");
if (keepCursorId) {
@ -343,29 +361,9 @@ export class Wnd {
if (update) {
updatePanelByEditor(currentTab.model.editor.protyle, true, pushBack);
}
// 切换到屏幕太高的页签 https://github.com/siyuan-note/siyuan/issues/5018
const protyle = currentTab.model.editor.protyle;
if (!protyle.scroll.element.classList.contains("fn__none") &&
protyle.wysiwyg.element.lastElementChild.getAttribute("data-eof") !== "true" &&
protyle.contentElement.scrollHeight > 0 &&
protyle.contentElement.scrollHeight <= protyle.contentElement.clientHeight) {
fetchPost("/api/filetree/getDoc", {
id: protyle.wysiwyg.element.lastElementChild.getAttribute("data-node-id"),
mode: 2,
k: protyle.options.key || "",
size: Constants.SIZE_GET,
}, getResponse => {
onGet(getResponse, protyle, [Constants.CB_GET_APPEND, Constants.CB_GET_UNCHANGEID]);
});
}
} else {
updatePanelByEditor(undefined, false);
}
if (currentTab && target === currentTab.headElement && currentTab.model instanceof Graph) {
currentTab.model.onGraph(false);
}
}
public addTab(tab: Tab, keepCursor = false) {

View file

@ -207,13 +207,7 @@ const JSONToCenter = (json: any, layout?: Layout | Wnd | Tab | Model) => {
}
(layout as Wnd).addTab(child);
} else if (json.instance === "Editor" && json.blockId) {
(layout as Tab).addModel(new Editor({
tab: (layout as Tab),
blockId: json.blockId,
mode: json.mode,
action: [json.action],
scrollAttr: json.scrollAttr,
}));
(layout as Tab).headElement.setAttribute("data-initdata", JSON.stringify(json));
} else if (json.instance === "Asset") {
(layout as Tab).addModel(new Asset({
tab: (layout as Tab),
@ -308,15 +302,6 @@ export const JSONToLayout = (isStart: boolean) => {
}
});
}
setTimeout(() => {
getAllModels().editor.find(item => {
if (item.headElement.classList.contains("item--focus")) {
updatePanelByEditor(item.editor.protyle, false, false);
return true;
}
});
}, 520);
};
export const layoutToJSON = (layout: Layout | Wnd | Tab | Model, json: any) => {

View file

@ -4,6 +4,7 @@ import {fetchPost} from "../../util/fetch";
import {onGet} from "../util/onGet";
import {showMessage} from "../../dialog/message";
import {updateHotkeyTip} from "../util/compatibility";
import {isMobile} from "../../util/functions";
export const scrollEvent = (protyle: IProtyle, element: HTMLElement) => {
let elementRect = element.getBoundingClientRect();
@ -21,8 +22,12 @@ export const scrollEvent = (protyle: IProtyle, element: HTMLElement) => {
protyle.toolbar.element.style.top = top + "px";
protyle.toolbar.element.style.display = "";
}
return;
}
if (!protyle.element.classList.contains("block__edit") && !isMobile()) {
protyle.contentElement.setAttribute("data-scrolltop", element.scrollTop.toString());
}
if (!window.siyuan.dragElement) { // https://ld246.com/article/1649638389841
hideElements(["gutter"], protyle);
}

View file

@ -9,13 +9,15 @@ export const saveScroll = (protyle: IProtyle, getObject = false) => {
const attr: IScrollAttr = {
startId: protyle.wysiwyg.element.firstElementChild.getAttribute("data-node-id"),
endId: protyle.wysiwyg.element.lastElementChild.getAttribute("data-node-id"),
scrollTop: protyle.contentElement.scrollTop
scrollTop: protyle.contentElement.scrollTop || parseInt(protyle.contentElement.getAttribute("data-scrolltop")) || 0,
}
let range: Range
if (getSelection().rangeCount > 0) {
range = getSelection().getRangeAt(0)
}
if (!range || !protyle.wysiwyg.element.contains(range.startContainer)) {
range = protyle.toolbar.range
}
if (range && protyle.wysiwyg.element.contains(range.startContainer)) {
const blockElement = hasClosestBlock(range.startContainer);
if (blockElement) {
@ -23,9 +25,9 @@ export const saveScroll = (protyle: IProtyle, getObject = false) => {
attr.focusId = blockElement.getAttribute("data-node-id");
attr.focusStart = position.start
attr.focusEnd = position.end
}
}
if (protyle.block.showAll) {
attr.zoomInId = protyle.block.id
}