mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-21 17:10:12 +01:00
⚡ 获取 json 布局不应保存 scroll
This commit is contained in:
parent
45bfec7d2f
commit
ac269b4e1b
16 changed files with 74 additions and 83 deletions
|
|
@ -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"]);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -263,8 +263,6 @@ export const transactionError = () => {
|
|||
exitSiYuan();
|
||||
/// #else
|
||||
exportLayout({
|
||||
reload: false,
|
||||
onlyData: false,
|
||||
errorExit: true,
|
||||
cb: exitSiYuan
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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", {}, () => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue