获取 json 布局不应保存 scroll

This commit is contained in:
Vanessa 2023-12-31 16:51:31 +08:00
parent 45bfec7d2f
commit ac269b4e1b
16 changed files with 74 additions and 83 deletions

View file

@ -144,7 +144,7 @@ const dialogArrow = (app: App, element: HTMLElement, event: KeyboardEvent) => {
openFileById({
app,
id: currentLiElement.getAttribute("data-node-id"),
action: [Constants.CB_GET_SCROLL]
action: [Constants.CB_GET_FOCUS, Constants.CB_GET_SCROLL]
});
}
hideElements(["dialog"]);

View file

@ -176,7 +176,6 @@ export const initWindow = async (app: App) => {
/// #if !BROWSER
const winOnClose = (close = false) => {
exportLayout({
reload: false,
cb() {
if (window.siyuan.config.appearance.closeButtonBehavior === 1 && !close) {
// 最小化
@ -191,7 +190,6 @@ export const initWindow = async (app: App) => {
exitSiYuan();
}
},
onlyData: false,
errorExit: true
});
};

View file

@ -306,8 +306,6 @@ export const about = {
networkServeElement.addEventListener("change", () => {
fetchPost("/api/system/setNetworkServe", {networkServe: networkServeElement.checked}, () => {
exportLayout({
reload: false,
onlyData: false,
errorExit: true,
cb: exitSiYuan
});
@ -323,9 +321,10 @@ export const about = {
googleAnalyticsElement.addEventListener("change", () => {
fetchPost("/api/system/setGoogleAnalytics", {googleAnalytics: googleAnalyticsElement.checked}, () => {
exportLayout({
reload: true,
onlyData: false,
errorExit: false,
cb() {
window.location.reload();
}
});
});
});
@ -333,8 +332,6 @@ export const about = {
uploadErrLogElement.addEventListener("change", () => {
fetchPost("/api/system/setUploadErrLog", {uploadErrLog: uploadErrLogElement.checked}, () => {
exportLayout({
reload: false,
onlyData: false,
errorExit: true,
cb: exitSiYuan
});
@ -369,9 +366,10 @@ export const about = {
proxyURL: `${window.siyuan.config.system.networkProxy.scheme}://${window.siyuan.config.system.networkProxy.host}:${window.siyuan.config.system.networkProxy.port}`,
}).then(() => {
exportLayout({
reload: true,
onlyData: false,
errorExit: false,
cb() {
window.location.reload();
},
});
});
/// #endif

View file

@ -169,9 +169,10 @@ export const appearance = {
window.siyuan.config.appearance.themeDark !== response.data.themeDark
)) {
exportLayout({
reload: true,
onlyData: false,
errorExit: false,
cb() {
window.location.reload();
},
});
return;
}
@ -180,8 +181,9 @@ export const appearance = {
(response.data.mode === 1 && OSTheme === "light") || (response.data.mode === 0 && OSTheme === "dark")
)) {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
return;
@ -215,8 +217,9 @@ export const appearance = {
});
appearance.element.querySelector("#appearanceRefresh").addEventListener("click", () => {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
});
@ -235,8 +238,9 @@ export const appearance = {
onSetappearance(data: IAppearance) {
if (data.lang !== window.siyuan.config.appearance.lang) {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
return;

View file

@ -626,8 +626,9 @@ export const bazaar = {
}, response => {
if (window.siyuan.config.appearance.themeJS && bazaarType === "themes") {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
return;
@ -686,8 +687,9 @@ export const bazaar = {
)) {
if (window.siyuan.config.appearance.themeJS) {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
} else {
@ -763,8 +765,9 @@ export const bazaar = {
(mode === 0 && window.siyuan.config.appearance.themeLight !== packageName)) &&
window.siyuan.config.appearance.themeJS) {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
} else {

View file

@ -259,8 +259,9 @@ export const keymap = {
bindEvent(app: App) {
keymap.element.querySelector("#keymapRefreshBtn").addEventListener("click", () => {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
});

View file

@ -263,8 +263,6 @@ export const transactionError = () => {
exitSiYuan();
/// #else
exportLayout({
reload: false,
onlyData: false,
errorExit: true,
cb: exitSiYuan
});

View file

@ -117,10 +117,8 @@ export const initBar = (app: App) => {
break;
} else if (targetId === "barExit") {
exportLayout({
reload: false,
onlyData: false,
errorExit: true,
cb: exitSiYuan
cb: exitSiYuan,
});
event.stopPropagation();
break;

View file

@ -220,25 +220,19 @@ export const saveLayout = () => {
};
export const exportLayout = (options: {
reload: boolean,
cb?: () => void,
onlyData: boolean,
errorExit: boolean,
cb: () => void,
errorExit: boolean
}) => {
if (isWindow()) {
const layoutJSON: any = {
layout: {},
};
layoutToJSON(window.siyuan.layout.layout, layoutJSON.layout);
if (options.onlyData) {
return layoutJSON;
}
getAllModels().editor.forEach(item => {
saveScroll(item.editor.protyle)
})
sessionStorage.setItem("layout", JSON.stringify(layoutJSON));
if (options.reload) {
window.location.reload();
} else if (options.cb) {
options.cb();
}
return;
}
const useElement = document.querySelector("#barDock use");
@ -253,21 +247,29 @@ export const exportLayout = (options: {
right: dockToJSON(window.siyuan.layout.rightDock),
};
layoutToJSON(window.siyuan.layout.layout, layoutJSON.layout);
if (options.onlyData) {
return layoutJSON;
}
getAllModels().editor.forEach(item => {
saveScroll(item.editor.protyle)
})
fetchPost("/api/system/setUILayout", {
layout: layoutJSON,
errorExit: options.errorExit // 后台不接受该参数,用于请求发生错误时退出程序
}, () => {
if (options.reload) {
window.location.reload();
} else if (options.cb) {
options.cb();
}
});
};
export const getAllLayout = () => {
const layoutJSON: any = {
hideDock: document.querySelector("#barDock use").getAttribute("xlink:href") === "#iconDock",
layout: {},
bottom: dockToJSON(window.siyuan.layout.bottomDock),
left: dockToJSON(window.siyuan.layout.leftDock),
right: dockToJSON(window.siyuan.layout.rightDock),
};
layoutToJSON(window.siyuan.layout.layout, layoutJSON.layout);
return layoutJSON;
}
const initInternalDock = (dockItem: IDockTab[]) => {
dockItem.forEach((existSubItem) => {
if (existSubItem.hotkeyLangId) {
@ -537,7 +539,6 @@ export const layoutToJSON = (layout: Layout | Wnd | Tab | Model, json: any, brea
json.mode = layout.editor.protyle.preview.element.classList.contains("fn__none") ? "wysiwyg" : "preview";
json.action = layout.editor.protyle.block.showAll ? Constants.CB_GET_ALL : Constants.CB_GET_SCROLL;
json.instance = "Editor";
saveScroll(layout.editor.protyle);
} else if (layout instanceof Asset) {
json.path = layout.path;
if (layout.pdfObject) {

View file

@ -11,7 +11,7 @@ import {isInAndroid, isInIOS, isIPad, setStorageVal, writeText} from "../protyle
import {openCard} from "../card/openCard";
import {openSetting} from "../config";
import {getAllDocks} from "../layout/getAll";
import {exportLayout} from "../layout/util";
import {exportLayout, getAllLayout} from "../layout/util";
import {getDockByType} from "../layout/tabUtil";
import {exitSiYuan, lockScreen} from "../dialog/processSystem";
import {showMessage} from "../dialog/message";
@ -252,11 +252,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => {
if (item.name === value) {
saveDialog.destroy();
confirmDialog(window.siyuan.languages.save, window.siyuan.languages.exportTplTip, () => {
item.layout = exportLayout({
reload: false,
onlyData: true,
errorExit: false,
});
item.layout = getAllLayout();
setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]);
});
return true;
@ -267,11 +263,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => {
}
window.siyuan.storage[Constants.LOCAL_LAYOUTS].push({
name: value,
layout: exportLayout({
reload: false,
onlyData: true,
errorExit: false,
})
layout: getAllLayout()
});
setStorageVal(Constants.LOCAL_LAYOUTS, window.siyuan.storage[Constants.LOCAL_LAYOUTS]);
saveDialog.destroy();
@ -427,10 +419,8 @@ export const workspaceMenu = (app: App, rect: DOMRect) => {
icon: "iconQuit",
click: () => {
exportLayout({
reload: false,
onlyData: false,
errorExit: true,
cb: exitSiYuan
cb: exitSiYuan,
});
}
}).element);

View file

@ -24,7 +24,7 @@ ${unicode2Emoji(item.icon || Constants.SIYUAN_IMAGE_FILE, "b3-list-item__graphic
element.firstElementChild.addEventListener("click", (event) => {
const liElement = hasClosestByClassName(event.target as HTMLElement, "b3-list-item");
if (liElement) {
openMobileFileById(app, liElement.dataset.nodeId, [Constants.CB_GET_SCROLL]);
openMobileFileById(app, liElement.dataset.nodeId, [Constants.CB_GET_SCROLL, Constants.CB_GET_HL]);
}
});
}

View file

@ -180,7 +180,7 @@ export const initFramework = (app: App, isStart: boolean) => {
const localDoc = window.siyuan.storage[Constants.LOCAL_DOCINFO];
fetchPost("/api/block/checkBlockExist", {id: localDoc.id}, existResponse => {
if (existResponse.data) {
openMobileFileById(app, localDoc.id, [Constants.CB_GET_SCROLL]);
openMobileFileById(app, localDoc.id, [Constants.CB_GET_SCROLL, Constants.CB_GET_HL]);
} else {
fetchPost("/api/block/getRecentUpdatedBlocks", {}, (response) => {
if (response.data.length !== 0) {

View file

@ -395,7 +395,7 @@ const focusElementById = (protyle: IProtyle, action: string[], scrollAttr?: IScr
if (hasScrollTop) {
protyle.contentElement.scrollTop = scrollAttr.scrollTop;
}
if (action.includes(Constants.CB_GET_FOCUS) || action.includes(Constants.CB_GET_HL) || action.includes(Constants.CB_GET_FOCUSFIRST)) {
if (action.includes(Constants.CB_GET_FOCUS) || action.includes(Constants.CB_GET_SCROLL) || action.includes(Constants.CB_GET_HL) || action.includes(Constants.CB_GET_FOCUSFIRST)) {
const contentRect = protyle.contentElement.getBoundingClientRect();
const focusRect = focusElement.getBoundingClientRect();
if (!hasScrollTop && (contentRect.top > focusRect.top || contentRect.bottom < focusRect.bottom)) {

View file

@ -139,8 +139,9 @@ export const initAssets = () => {
if (window.siyuan.config.appearance.themeJS) {
/// #if !MOBILE
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
/// #else
@ -271,8 +272,9 @@ export const setMode = (modeElementValue: number) => {
window.siyuan.config.appearance.themeDark !== response.data.themeDark
)) {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
return;
@ -282,8 +284,9 @@ export const setMode = (modeElementValue: number) => {
(response.data.mode === 1 && OSTheme === "light") || (response.data.mode === 0 && OSTheme === "dark")
)) {
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
return;

View file

@ -30,8 +30,9 @@ export const processMessage = (response: IWebSocketData) => {
window.location.reload();
/// #else
exportLayout({
reload: true,
onlyData: false,
cb() {
window.location.reload();
},
errorExit: false,
});
/// #endif

View file

@ -16,8 +16,6 @@ export const onWindowsMsg = (ipcData: IWebSocketData) => {
break;
case "lockscreen":
exportLayout({
reload: false,
onlyData: false,
errorExit: false,
cb() {
fetchPost("/api/system/logoutAuth", {}, () => {
@ -29,8 +27,6 @@ export const onWindowsMsg = (ipcData: IWebSocketData) => {
case "lockscreenByMode":
if (window.siyuan.config.system.lockScreenMode === 1) {
exportLayout({
reload: false,
onlyData: false,
errorExit: false,
cb() {
fetchPost("/api/system/logoutAuth", {}, () => {