From 1caaf5afc9f912493d9079e14e0bb710cd80f2a6 Mon Sep 17 00:00:00 2001 From: Vanessa Date: Fri, 13 Feb 2026 20:44:15 +0800 Subject: [PATCH] :art: https://github.com/siyuan-note/siyuan/issues/17039 --- app/src/config/about.ts | 12 +++++++++--- app/src/index.ts | 4 ++-- app/src/layout/topBar.ts | 8 ++++++-- app/src/menus/commonMenuItem.ts | 4 ++-- app/src/menus/workspace.ts | 11 +++++++++-- app/src/mobile/index.ts | 6 ++---- app/src/mobile/menu/index.ts | 8 +++----- app/src/mobile/settings/about.ts | 11 ++++++++--- app/src/protyle/export/index.ts | 4 ++-- app/src/protyle/render/av/render.ts | 4 ++-- app/src/protyle/util/compatibility.ts | 7 +++++++ app/src/util/assets.ts | 13 +++++++++++-- 12 files changed, 63 insertions(+), 29 deletions(-) diff --git a/app/src/config/about.ts b/app/src/config/about.ts index 1d16ca7a8..da159034c 100644 --- a/app/src/config/about.ts +++ b/app/src/config/about.ts @@ -7,7 +7,13 @@ import {fetchPost} from "../util/fetch"; import {setAccessAuthCode} from "./util/about"; import {exportLayout} from "../layout/util"; import {exitSiYuan, processSync} from "../dialog/processSystem"; -import {isInAndroid, isInHarmony, isInIOS, isIPad, isMac, openByMobile, writeText} from "../protyle/util/compatibility"; +import { + isInMobileApp, + isIPad, + isMac, + openByMobile, + writeText +} from "../protyle/util/compatibility"; import {showMessage} from "../dialog/message"; import {Dialog} from "../dialog"; import {confirmDialog} from "../dialog/confirmDialog"; @@ -106,7 +112,7 @@ export const about = { -
+
${window.siyuan.languages.about5} @@ -126,7 +132,7 @@ export const about = {
-
+
${window.siyuan.languages.about2}
${window.siyuan.languages.about3.replace("${port}", location.port)}
diff --git a/app/src/index.ts b/app/src/index.ts index 554d1e3e9..3c6a1a927 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -25,7 +25,7 @@ import { } from "./dialog/processSystem"; import {initMessage, showMessage} from "./dialog/message"; import {getAllTabs} from "./layout/getAll"; -import {getLocalStorage, isChromeBrowser} from "./protyle/util/compatibility"; +import {getLocalStorage, isChromeBrowser, isInMobileApp} from "./protyle/util/compatibility"; import {getSearch} from "./util/functions"; import {checkPublishServiceClosed} from "./util/processMessage"; import {hideAllElements} from "./protyle/ui/hideElements"; @@ -213,7 +213,7 @@ export class App { setTitle(window.siyuan.languages.siyuanNote); initMessage(); /// #if BROWSER && !MOBILE - if (!window.siyuan.config.readonly && !window.siyuan.isPublish && !isChromeBrowser()) { + if (!isInMobileApp() && !window.siyuan.config.readonly && !window.siyuan.isPublish && !isChromeBrowser()) { showMessage(window.siyuan.languages.useChrome, 0, "error"); } /// #endif diff --git a/app/src/layout/topBar.ts b/app/src/layout/topBar.ts index f8e3cbff5..610754989 100644 --- a/app/src/layout/topBar.ts +++ b/app/src/layout/topBar.ts @@ -1,5 +1,9 @@ import {getWorkspaceName} from "../util/noRelyPCFunction"; -import {isInAndroid, isInHarmony, isInIOS, setStorageVal, updateHotkeyTip} from "../protyle/util/compatibility"; +import { + isInMobileApp, + setStorageVal, + updateHotkeyTip +} from "../protyle/util/compatibility"; import {exitSiYuan, processSync} from "../dialog/processSystem"; import {goBack, goForward} from "../util/backForward"; import {syncGuide} from "../sync/syncGuide"; @@ -54,7 +58,7 @@ export const initBar = (app: App) => {
-
+
diff --git a/app/src/menus/commonMenuItem.ts b/app/src/menus/commonMenuItem.ts index 3ab1dae25..b8a6a5306 100644 --- a/app/src/menus/commonMenuItem.ts +++ b/app/src/menus/commonMenuItem.ts @@ -6,7 +6,7 @@ import {getSearch, isMobile, isValidCustomAttrName} from "../util/functions"; import {isLocalPath, movePathTo, moveToPath, pathPosix} from "../util/pathName"; import {MenuItem} from "./Menu"; import {onExport, saveExport} from "../protyle/export"; -import {isInAndroid, isInHarmony, isInIOS, openByMobile, writeText} from "../protyle/util/compatibility"; +import {isInAndroid, isInHarmony, isInIOS, isInMobileApp, openByMobile, writeText} from "../protyle/util/compatibility"; import {fetchPost, fetchSyncPost} from "../util/fetch"; import {hideMessage, showMessage} from "../dialog/message"; import {Dialog} from "../dialog"; @@ -785,7 +785,7 @@ export const exportMd = (id: string) => { id: "exportPDF", label: window.siyuan.languages.print, icon: "iconPDF", - ignore: !isInAndroid() && !isInHarmony() && !isInIOS(), + ignore: !isInMobileApp(), click: () => { const msgId = showMessage(window.siyuan.languages.exporting); const localData = window.siyuan.storage[Constants.LOCAL_EXPORTPDF]; diff --git a/app/src/menus/workspace.ts b/app/src/menus/workspace.ts index 6c9786005..707662035 100644 --- a/app/src/menus/workspace.ts +++ b/app/src/menus/workspace.ts @@ -7,7 +7,14 @@ import {getOpenNotebookCount, originalPath, pathPosix, useShell} from "../util/p import {fetchNewDailyNote, mountHelp, newDailyNote} from "../util/mount"; import {fetchPost} from "../util/fetch"; import {Constants} from "../constants"; -import {isInAndroid, isInHarmony, isInIOS, isIPad, setStorageVal, writeText} from "../protyle/util/compatibility"; +import { + isInAndroid, + isInHarmony, + isInMobileApp, + isIPad, + setStorageVal, + writeText +} from "../protyle/util/compatibility"; import {openCard} from "../card/openCard"; import {openSetting} from "../config"; import {getAllDocks} from "../layout/getAll"; @@ -318,7 +325,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => { }); }); /// #endif - if (!isBrowser() || isInIOS() || isInAndroid() || isInHarmony()) { + if (!isBrowser() || isInMobileApp()) { window.siyuan.menus.menu.append(new MenuItem({ id: "workspaceList", label: window.siyuan.languages.workspaceList, diff --git a/app/src/mobile/index.ts b/app/src/mobile/index.ts index 4de663891..cbb4dd740 100644 --- a/app/src/mobile/index.ts +++ b/app/src/mobile/index.ts @@ -18,9 +18,7 @@ import {activeBlur, hideKeyboardToolbar, showKeyboardToolbar} from "./util/keybo import { getLocalStorage, isChromeBrowser, - isInAndroid, - isInHarmony, - isInIOS, + isInMobileApp, writeText } from "../protyle/util/compatibility"; import {getCurrentEditor, openMobileFileById} from "./editor"; @@ -195,7 +193,7 @@ class App { } } }); - if (!isInAndroid() && !isInHarmony() && !isInIOS && isChromeBrowser()) { + if (!isInMobileApp() && isChromeBrowser()) { document.querySelector('meta[name="viewport"]').setAttribute("content", "width=device-width, height=device-height, interactive-widget=resizes-content, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, viewport-fit=cover"); } }); diff --git a/app/src/mobile/menu/index.ts b/app/src/mobile/menu/index.ts index bd91a23bf..007e4044f 100644 --- a/app/src/mobile/menu/index.ts +++ b/app/src/mobile/menu/index.ts @@ -21,9 +21,7 @@ import {App} from "../../index"; import { isDisabledFeature, isHuawei, - isInAndroid, - isInHarmony, - isInIOS, + isInMobileApp, isIPhone } from "../../protyle/util/compatibility"; import {newFile} from "../../util/newFile"; @@ -98,8 +96,8 @@ export const initRightMenu = (app: App) => { -
- -
+
${window.siyuan.languages.about5}
${window.siyuan.languages.systemLogTip}
-
+
${window.siyuan.languages.workspaceList}
diff --git a/app/src/protyle/export/index.ts b/app/src/protyle/export/index.ts index 4fa586681..d15da9c61 100644 --- a/app/src/protyle/export/index.ts +++ b/app/src/protyle/export/index.ts @@ -11,7 +11,7 @@ import {getThemeMode, setInlineStyle} from "../../util/assets"; import {fetchPost, fetchSyncPost} from "../../util/fetch"; import {Dialog} from "../../dialog"; import {replaceLocalPath} from "../../editor/rename"; -import {getScreenWidth, isInAndroid, isInHarmony, isInIOS, setStorageVal} from "../util/compatibility"; +import {getScreenWidth, isInMobileApp, setStorageVal} from "../util/compatibility"; import {getFrontend} from "../../util/functions"; const getPluginStyle = async () => { @@ -762,7 +762,7 @@ export const onExport = async (data: IWebSocketData, filePath: string, servePath themeStyle = ``; } const screenWidth = getScreenWidth(); - const isInMobile = isInAndroid() || isInHarmony() || isInIOS(); + const isInMobile = isInMobileApp(); const mobileHtml = isInMobile ? { js: `document.body.style.minWidth = "${screenWidth}px";`, css: `@page { size: A4; margin: 10mm 0 10mm 0; background-color: var(--b3-theme-background); } diff --git a/app/src/protyle/render/av/render.ts b/app/src/protyle/render/av/render.ts index 7b9fcd726..2f2b3e59f 100644 --- a/app/src/protyle/render/av/render.ts +++ b/app/src/protyle/render/av/render.ts @@ -11,7 +11,7 @@ import {renderAVAttribute} from "./blockAttr"; import {addClearButton} from "../../../util/addClearButton"; import {escapeAriaLabel, escapeAttr, escapeHtml} from "../../../util/escape"; import {electronUndo} from "../../undo"; -import {isInAndroid, isInHarmony, isInIOS} from "../../util/compatibility"; +import {isInMobileApp} from "../../util/compatibility"; import {isMobile} from "../../../util/functions"; import {renderGallery} from "./gallery/render"; import {getFieldsByData, getViewIcon} from "./view"; @@ -466,7 +466,7 @@ export const avRender = async (element: Element, protyle: IProtyle, cb?: (data: if (e.getAttribute("data-render") === "true" || hasClosestByClassName(e, "av__gallery-content")) { continue; } - if (isMobile() || isInIOS() || isInAndroid() || isInHarmony()) { + if (isMobile() || isInMobileApp()) { e.classList.add("av--touch"); } diff --git a/app/src/protyle/util/compatibility.ts b/app/src/protyle/util/compatibility.ts index f36780af6..d7dbc97fa 100644 --- a/app/src/protyle/util/compatibility.ts +++ b/app/src/protyle/util/compatibility.ts @@ -350,6 +350,13 @@ export const isInIOS = () => { return window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers; }; +export const isInMobileApp = () => { + if (isInAndroid() || isInHarmony() || isInIOS()) { + return true; + } + return false; +}; + export const isInHarmony = () => { return window.siyuan.config.system.container === "harmony" && window.JSHarmony; }; diff --git a/app/src/util/assets.ts b/app/src/util/assets.ts index 4ec68c3c7..ce9575519 100644 --- a/app/src/util/assets.ts +++ b/app/src/util/assets.ts @@ -6,7 +6,16 @@ import {getAllModels} from "../layout/getAll"; import {exportLayout} from "../layout/util"; /// #endif import {fetchPost} from "./fetch"; -import {isInAndroid, isInHarmony, isInIOS, isIPad, isIPhone, isMac, isWin11} from "../protyle/util/compatibility"; +import { + isInAndroid, + isInHarmony, + isInIOS, + isInMobileApp, + isIPad, + isIPhone, + isMac, + isWin11 +} from "../protyle/util/compatibility"; import {setCodeTheme} from "../protyle/render/util"; import {getBackend, getFrontend} from "./functions"; @@ -363,7 +372,7 @@ const rgba2hex = (rgba: string) => { }; const updateMobileTheme = (OSTheme: string) => { - if (isInIOS() || isInAndroid() || isInHarmony()) { + if (isInMobileApp()) { setTimeout(() => { const backgroundColor = rgba2hex(getComputedStyle(document.body).getPropertyValue("--b3-theme-background").trim()); let mode = window.siyuan.config.appearance.mode;