diff --git a/app/src/layout/topBar.ts b/app/src/layout/topBar.ts
new file mode 100644
index 000000000..ca10c221a
--- /dev/null
+++ b/app/src/layout/topBar.ts
@@ -0,0 +1,128 @@
+import {getWorkspaceName} from "../util/noRelyPCFunction";
+import {updateHotkeyTip} from "../protyle/util/compatibility";
+import {processSync} from "../dialog/processSystem";
+import {goBack, goForward} from "../util/backForward";
+import {syncGuide} from "../sync/syncGuide";
+import {workspaceMenu} from "../menus/workspace";
+import {editor} from "../config/editor";
+import {MenuItem} from "../menus/Menu";
+import {setMode} from "../util/assets";
+import {openSetting} from "../config";
+import {openSearch} from "../search/spread";
+import {setProxy} from "../util/onGetConfig";
+
+export const updateEditModeElement = () => {
+ const target = document.querySelector("#barReadonly");
+ if (window.siyuan.config.editor.readOnly) {
+ target.classList.add("toolbar__item--active");
+ target.setAttribute("aria-label", `${window.siyuan.languages.use} ${window.siyuan.languages.editMode} ${updateHotkeyTip(window.siyuan.config.keymap.general.editMode.custom)}`);
+ target.querySelector("use").setAttribute("xlink:href", "#iconPreview");
+ } else {
+ target.classList.remove("toolbar__item--active");
+ target.setAttribute("aria-label", `${window.siyuan.languages.use} ${window.siyuan.languages.editReadonly} ${updateHotkeyTip(window.siyuan.config.keymap.general.editMode.custom)}`);
+ target.querySelector("use").setAttribute("xlink:href", "#iconEdit");
+ }
+};
+export const initBar = () => {
+ const toolbarElement = document.getElementById("toolbar");
+ toolbarElement.innerHTML = `
+
+ ${getWorkspaceName()}
+
+
+
+
+
+
+
+开发版,使用前请进行备份 Development version, please backup before use
+
+
+
+
+
+
+
+
+
+
+`;
+ processSync();
+ toolbarElement.addEventListener("click", (event: MouseEvent) => {
+ let target = event.target as HTMLElement;
+ while (!target.classList.contains("toolbar")) {
+ if (target.id === "barBack") {
+ goBack();
+ event.stopPropagation();
+ break;
+ } else if (target.id === "barForward") {
+ goForward();
+ event.stopPropagation();
+ break;
+ } else if (target.id === "barSync") {
+ syncGuide(target);
+ event.stopPropagation();
+ break;
+ } else if (target.id === "barWorkspace") {
+ workspaceMenu(target.getBoundingClientRect());
+ event.stopPropagation();
+ break;
+ } else if (target.id === "barReadonly") {
+ editor.setReadonly();
+ event.stopPropagation();
+ break;
+ } else if (target.id === "barMode") {
+ if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
+ window.siyuan.menus.menu.element.getAttribute("data-name") === "barmode") {
+ window.siyuan.menus.menu.remove();
+ return;
+ }
+ window.siyuan.menus.menu.remove();
+ window.siyuan.menus.menu.element.setAttribute("data-name", "barmode");
+ window.siyuan.menus.menu.append(new MenuItem({
+ label: window.siyuan.languages.themeLight,
+ icon: "iconLight",
+ current: window.siyuan.config.appearance.mode === 0 && !window.siyuan.config.appearance.modeOS,
+ click: () => {
+ setMode(0);
+ }
+ }).element);
+ window.siyuan.menus.menu.append(new MenuItem({
+ label: window.siyuan.languages.themeDark,
+ current: window.siyuan.config.appearance.mode === 1 && !window.siyuan.config.appearance.modeOS,
+ icon: "iconDark",
+ click: () => {
+ setMode(1);
+ }
+ }).element);
+ window.siyuan.menus.menu.append(new MenuItem({
+ label: window.siyuan.languages.themeOS,
+ current: window.siyuan.config.appearance.modeOS,
+ icon: "iconMode",
+ click: () => {
+ setMode(2);
+ }
+ }).element);
+ const rect = target.getBoundingClientRect();
+ window.siyuan.menus.menu.popup({x: rect.right, y: rect.bottom}, true);
+ event.stopPropagation();
+ break;
+ } else if (target.id === "toolbarVIP") {
+ const dialogSetting = openSetting();
+ dialogSetting.element.querySelector('.b3-tab-bar [data-name="account"]').dispatchEvent(new CustomEvent("click"));
+ event.stopPropagation();
+ break;
+ } else if (target.id === "barSearch") {
+ openSearch(window.siyuan.config.keymap.general.globalSearch.custom);
+ event.stopPropagation();
+ break;
+ }
+ target = target.parentElement;
+ }
+ });
+ setProxy();
+};