mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-19 16:10:12 +01:00
🎨 Support HarmonyOS NEXT system https://github.com/siyuan-note/siyuan/issues/13184
This commit is contained in:
parent
8639955ff0
commit
65f55b0dbe
15 changed files with 58 additions and 49 deletions
|
|
@ -7,7 +7,7 @@ import {fetchPost} from "../util/fetch";
|
||||||
import {setAccessAuthCode} from "./util/about";
|
import {setAccessAuthCode} from "./util/about";
|
||||||
import {exportLayout} from "../layout/util";
|
import {exportLayout} from "../layout/util";
|
||||||
import {exitSiYuan, processSync} from "../dialog/processSystem";
|
import {exitSiYuan, processSync} from "../dialog/processSystem";
|
||||||
import {isInAndroid, isInIOS, isIPad, isMac, openByMobile, writeText} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, isInIOS, isIPad, isMac, openByMobile, writeText} from "../protyle/util/compatibility";
|
||||||
import {showMessage} from "../dialog/message";
|
import {showMessage} from "../dialog/message";
|
||||||
import {Dialog} from "../dialog";
|
import {Dialog} from "../dialog";
|
||||||
import {confirmDialog} from "../dialog/confirmDialog";
|
import {confirmDialog} from "../dialog/confirmDialog";
|
||||||
|
|
@ -79,7 +79,7 @@ export const about = {
|
||||||
<div class="fn__space"></div>
|
<div class="fn__space"></div>
|
||||||
<input class="b3-switch fn__flex-center" id="networkServe" type="checkbox"${window.siyuan.config.system.networkServe ? " checked" : ""}>
|
<input class="b3-switch fn__flex-center" id="networkServe" type="checkbox"${window.siyuan.config.system.networkServe ? " checked" : ""}>
|
||||||
</label>
|
</label>
|
||||||
<div class="b3-label${(window.siyuan.config.readonly || (isBrowser() && !isInIOS() && !isInAndroid() && !isIPad())) ? " fn__none" : ""}">
|
<div class="b3-label${(window.siyuan.config.readonly || (isBrowser() && !isInIOS() && !isInAndroid() && !isIPad() && !isInHarmony())) ? " fn__none" : ""}">
|
||||||
<div class="fn__flex">
|
<div class="fn__flex">
|
||||||
<div class="fn__flex-1">
|
<div class="fn__flex-1">
|
||||||
${window.siyuan.languages.about5}
|
${window.siyuan.languages.about5}
|
||||||
|
|
@ -99,7 +99,7 @@ export const about = {
|
||||||
<input class="b3-switch fn__flex-center" id="lockScreenMode" type="checkbox"${window.siyuan.config.system.lockScreenMode === 1 ? " checked" : ""}>
|
<input class="b3-switch fn__flex-center" id="lockScreenMode" type="checkbox"${window.siyuan.config.system.lockScreenMode === 1 ? " checked" : ""}>
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-label config__item${(isBrowser() && !isInAndroid() && !isInIOS()) ? " fn__none" : " fn__flex"}">
|
<div class="b3-label config__item${(isBrowser() && !isInAndroid() && !isInIOS() && !isInHarmony()) ? " fn__none" : " fn__flex"}">
|
||||||
<div class="fn__flex-1">
|
<div class="fn__flex-1">
|
||||||
${window.siyuan.languages.about2}
|
${window.siyuan.languages.about2}
|
||||||
<div class="b3-label__text">${window.siyuan.languages.about3.replace("${port}", location.port)}</div>
|
<div class="b3-label__text">${window.siyuan.languages.about3.replace("${port}", location.port)}</div>
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ import {ai} from "./ai";
|
||||||
import {flashcard} from "./flashcard";
|
import {flashcard} from "./flashcard";
|
||||||
import {publish} from "./publish";
|
import {publish} from "./publish";
|
||||||
import {App} from "../index";
|
import {App} from "../index";
|
||||||
import {isHuawei} from "../protyle/util/compatibility";
|
import {isHuawei, isInHarmony} from "../protyle/util/compatibility";
|
||||||
import {Constants} from "../constants";
|
import {Constants} from "../constants";
|
||||||
|
|
||||||
export const genItemPanel = (type: string, containerElement: Element, app: App) => {
|
export const genItemPanel = (type: string, containerElement: Element, app: App) => {
|
||||||
|
|
@ -116,7 +116,7 @@ export const openSetting = (app: App) => {
|
||||||
<li data-name="image" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconImage"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.assets}</span></li>
|
<li data-name="image" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconImage"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.assets}</span></li>
|
||||||
<li data-name="export" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconUpload"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.export}</span></li>
|
<li data-name="export" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconUpload"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.export}</span></li>
|
||||||
<li data-name="appearance" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconTheme"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.appearance}</span></li>
|
<li data-name="appearance" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconTheme"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.appearance}</span></li>
|
||||||
<li data-name="bazaar" class="b3-list-item${isHuawei() ? " fn__none" : ""}"><svg class="b3-list-item__graphic"><use xlink:href="#iconBazaar"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.bazaar}</span></li>
|
<li data-name="bazaar" class="b3-list-item${isHuawei() || isInHarmony() ? " fn__none" : ""}"><svg class="b3-list-item__graphic"><use xlink:href="#iconBazaar"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.bazaar}</span></li>
|
||||||
<li data-name="search" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconSearch"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.search}</span></li>
|
<li data-name="search" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconSearch"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.search}</span></li>
|
||||||
<li data-name="keymap" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconKeymap"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.keymap}</span></li>
|
<li data-name="keymap" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconKeymap"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.keymap}</span></li>
|
||||||
<li data-name="account" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconAccount"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.account}</span></li>
|
<li data-name="account" class="b3-list-item"><svg class="b3-list-item__graphic"><use xlink:href="#iconAccount"></use></svg><span class="b3-list-item__text">${window.siyuan.languages.account}</span></li>
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import {setEmpty} from "../mobile/util/setEmpty";
|
||||||
import {hideAllElements, hideElements} from "../protyle/ui/hideElements";
|
import {hideAllElements, hideElements} from "../protyle/ui/hideElements";
|
||||||
import {App} from "../index";
|
import {App} from "../index";
|
||||||
import {saveScroll} from "../protyle/scroll/saveScroll";
|
import {saveScroll} from "../protyle/scroll/saveScroll";
|
||||||
import {isInAndroid, isInIOS, setStorageVal} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, isInIOS, setStorageVal} from "../protyle/util/compatibility";
|
||||||
import {Plugin} from "../plugin";
|
import {Plugin} from "../plugin";
|
||||||
|
|
||||||
const updateTitle = (rootID: string, tab: Tab, protyle?: IProtyle) => {
|
const updateTitle = (rootID: string, tab: Tab, protyle?: IProtyle) => {
|
||||||
|
|
@ -301,7 +301,7 @@ export const exitSiYuan = async () => {
|
||||||
/// #if !BROWSER
|
/// #if !BROWSER
|
||||||
ipcRenderer.send(Constants.SIYUAN_QUIT, location.port);
|
ipcRenderer.send(Constants.SIYUAN_QUIT, location.port);
|
||||||
/// #else
|
/// #else
|
||||||
if (isInIOS() || isInAndroid()) {
|
if (isInIOS() || isInAndroid() || isInHarmony()) {
|
||||||
window.location.href = "siyuan://api/system/exit";
|
window.location.href = "siyuan://api/system/exit";
|
||||||
}
|
}
|
||||||
/// #endif
|
/// #endif
|
||||||
|
|
@ -341,7 +341,7 @@ export const exitSiYuan = async () => {
|
||||||
/// #if !BROWSER
|
/// #if !BROWSER
|
||||||
ipcRenderer.send(Constants.SIYUAN_QUIT, location.port);
|
ipcRenderer.send(Constants.SIYUAN_QUIT, location.port);
|
||||||
/// #else
|
/// #else
|
||||||
if (isInIOS() || isInAndroid()) {
|
if (isInIOS() || isInAndroid() || isInHarmony()) {
|
||||||
window.location.href = "siyuan://api/system/exit";
|
window.location.href = "siyuan://api/system/exit";
|
||||||
}
|
}
|
||||||
/// #endif
|
/// #endif
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import {getWorkspaceName} from "../util/noRelyPCFunction";
|
import {getWorkspaceName} from "../util/noRelyPCFunction";
|
||||||
import {isInAndroid, isInIOS, setStorageVal, updateHotkeyTip} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, isInIOS, setStorageVal, updateHotkeyTip} from "../protyle/util/compatibility";
|
||||||
import {exitSiYuan, processSync} from "../dialog/processSystem";
|
import {exitSiYuan, processSync} from "../dialog/processSystem";
|
||||||
import {goBack, goForward} from "../util/backForward";
|
import {goBack, goForward} from "../util/backForward";
|
||||||
import {syncGuide} from "../sync/syncGuide";
|
import {syncGuide} from "../sync/syncGuide";
|
||||||
|
|
@ -54,7 +54,7 @@ export const initBar = (app: App) => {
|
||||||
<div id="barMode" class="toolbar__item ariaLabel${window.siyuan.config.readonly ? " fn__none" : ""}" aria-label="${window.siyuan.languages.appearanceMode}">
|
<div id="barMode" class="toolbar__item ariaLabel${window.siyuan.config.readonly ? " fn__none" : ""}" aria-label="${window.siyuan.languages.appearanceMode}">
|
||||||
<svg><use xlink:href="#icon${window.siyuan.config.appearance.modeOS ? "Mode" : (window.siyuan.config.appearance.mode === 0 ? "Light" : "Dark")}"></use></svg>
|
<svg><use xlink:href="#icon${window.siyuan.config.appearance.modeOS ? "Mode" : (window.siyuan.config.appearance.mode === 0 ? "Light" : "Dark")}"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<div id="barExit" class="ft__error toolbar__item ariaLabel${(isInIOS() || isInAndroid()) ? "" : " fn__none"}" aria-label="${window.siyuan.languages.safeQuit}">
|
<div id="barExit" class="ft__error toolbar__item ariaLabel${(isInIOS() || isInAndroid() || isInHarmony()) ? "" : " fn__none"}" aria-label="${window.siyuan.languages.safeQuit}">
|
||||||
<svg><use xlink:href="#iconQuit"></use></svg>
|
<svg><use xlink:href="#iconQuit"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<div id="barMore" class="toolbar__item ariaLabel" aria-label="${window.siyuan.languages.more}">
|
<div id="barMore" class="toolbar__item ariaLabel" aria-label="${window.siyuan.languages.more}">
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import {getSearch, isMobile, isValidAttrName} from "../util/functions";
|
||||||
import {isLocalPath, movePathTo, moveToPath, pathPosix} from "../util/pathName";
|
import {isLocalPath, movePathTo, moveToPath, pathPosix} from "../util/pathName";
|
||||||
import {MenuItem} from "./Menu";
|
import {MenuItem} from "./Menu";
|
||||||
import {saveExport} from "../protyle/export";
|
import {saveExport} from "../protyle/export";
|
||||||
import {isInAndroid, openByMobile, writeText} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, openByMobile} from "../protyle/util/compatibility";
|
||||||
import {fetchPost, fetchSyncPost} from "../util/fetch";
|
import {fetchPost, fetchSyncPost} from "../util/fetch";
|
||||||
import {hideMessage, showMessage} from "../dialog/message";
|
import {hideMessage, showMessage} from "../dialog/message";
|
||||||
import {Dialog} from "../dialog";
|
import {Dialog} from "../dialog";
|
||||||
|
|
@ -710,7 +710,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
|
||||||
const submenu = [];
|
const submenu = [];
|
||||||
/// #if MOBILE
|
/// #if MOBILE
|
||||||
submenu.push({
|
submenu.push({
|
||||||
label: isInAndroid() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
|
label: isInAndroid() || isInHarmony() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
|
||||||
accelerator: showAccelerator ? window.siyuan.languages.click : "",
|
accelerator: showAccelerator ? window.siyuan.languages.click : "",
|
||||||
click: () => {
|
click: () => {
|
||||||
openByMobile(src);
|
openByMobile(src);
|
||||||
|
|
@ -781,7 +781,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
|
||||||
});
|
});
|
||||||
/// #else
|
/// #else
|
||||||
submenu.push({
|
submenu.push({
|
||||||
label: isInAndroid() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
|
label: isInAndroid() || isInHarmony() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
|
||||||
accelerator: showAccelerator ? window.siyuan.languages.click : "",
|
accelerator: showAccelerator ? window.siyuan.languages.click : "",
|
||||||
click: () => {
|
click: () => {
|
||||||
openByMobile(src);
|
openByMobile(src);
|
||||||
|
|
@ -807,7 +807,7 @@ export const openMenu = (app: App, src: string, onlyMenu: boolean, showAccelerat
|
||||||
});
|
});
|
||||||
/// #else
|
/// #else
|
||||||
submenu.push({
|
submenu.push({
|
||||||
label: isInAndroid() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
|
label: isInAndroid() || isInHarmony() ? window.siyuan.languages.useDefault : window.siyuan.languages.useBrowserView,
|
||||||
accelerator: showAccelerator ? window.siyuan.languages.click : "",
|
accelerator: showAccelerator ? window.siyuan.languages.click : "",
|
||||||
click: () => {
|
click: () => {
|
||||||
openByMobile(src);
|
openByMobile(src);
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import {Constants} from "../constants";
|
||||||
import {openNewWindowById} from "../window/openNewWindow";
|
import {openNewWindowById} from "../window/openNewWindow";
|
||||||
import {MenuItem} from "./Menu";
|
import {MenuItem} from "./Menu";
|
||||||
import {App} from "../index";
|
import {App} from "../index";
|
||||||
import {isInAndroid, openByMobile, updateHotkeyTip} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, openByMobile, updateHotkeyTip} from "../protyle/util/compatibility";
|
||||||
import {checkFold} from "../util/noRelyPCFunction";
|
import {checkFold} from "../util/noRelyPCFunction";
|
||||||
|
|
||||||
export const exportAsset = (src: string) => {
|
export const exportAsset = (src: string) => {
|
||||||
|
|
@ -172,7 +172,7 @@ export const openEditorTab = (app: App, ids: string[], notebookId?: string, path
|
||||||
};
|
};
|
||||||
|
|
||||||
export const copyPNGByLink = (link: string) => {
|
export const copyPNGByLink = (link: string) => {
|
||||||
if (isInAndroid()) {
|
if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.writeImageClipboard(link);
|
window.JSAndroid.writeImageClipboard(link);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import {getOpenNotebookCount, originalPath, pathPosix, showFileInFolder} from ".
|
||||||
import {fetchNewDailyNote, mountHelp, newDailyNote} from "../util/mount";
|
import {fetchNewDailyNote, mountHelp, newDailyNote} from "../util/mount";
|
||||||
import {fetchPost} from "../util/fetch";
|
import {fetchPost} from "../util/fetch";
|
||||||
import {Constants} from "../constants";
|
import {Constants} from "../constants";
|
||||||
import {isInAndroid, isInIOS, isIPad, setStorageVal, writeText} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, isInIOS, isIPad, setStorageVal, writeText} from "../protyle/util/compatibility";
|
||||||
import {openCard} from "../card/openCard";
|
import {openCard} from "../card/openCard";
|
||||||
import {openSetting} from "../config";
|
import {openSetting} from "../config";
|
||||||
import {getAllDocks} from "../layout/getAll";
|
import {getAllDocks} from "../layout/getAll";
|
||||||
|
|
@ -317,7 +317,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
/// #endif
|
/// #endif
|
||||||
if (!isBrowser() || isInIOS() || isInAndroid()) {
|
if (!isBrowser() || isInIOS() || isInAndroid() || isInHarmony()) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "workspaceList",
|
id: "workspaceList",
|
||||||
label: window.siyuan.languages.workspaceList,
|
label: window.siyuan.languages.workspaceList,
|
||||||
|
|
@ -497,7 +497,7 @@ export const workspaceMenu = (app: App, rect: DOMRect) => {
|
||||||
}
|
}
|
||||||
}).element);
|
}).element);
|
||||||
/// #endif
|
/// #endif
|
||||||
if (isIPad() || isInAndroid() || !isBrowser()) {
|
if (isIPad() || isInAndroid() || isInHarmony() || !isBrowser()) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({id: "separator_3", type: "separator"}).element);
|
window.siyuan.menus.menu.append(new MenuItem({id: "separator_3", type: "separator"}).element);
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "safeQuit",
|
id: "safeQuit",
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,14 @@ import {initAbout} from "../settings/about";
|
||||||
import {getRecentDocs} from "./getRecentDocs";
|
import {getRecentDocs} from "./getRecentDocs";
|
||||||
import {initEditor} from "../settings/editor";
|
import {initEditor} from "../settings/editor";
|
||||||
import {App} from "../../index";
|
import {App} from "../../index";
|
||||||
import {isDisabledFeature, isHuawei, isInAndroid, isInIOS, isIPhone} from "../../protyle/util/compatibility";
|
import {
|
||||||
|
isDisabledFeature,
|
||||||
|
isHuawei,
|
||||||
|
isInAndroid,
|
||||||
|
isInHarmony,
|
||||||
|
isInIOS,
|
||||||
|
isIPhone
|
||||||
|
} from "../../protyle/util/compatibility";
|
||||||
import {newFile} from "../../util/newFile";
|
import {newFile} from "../../util/newFile";
|
||||||
import {afterLoadPlugin} from "../../plugin/loader";
|
import {afterLoadPlugin} from "../../plugin/loader";
|
||||||
import {commandPanel} from "../../boot/globalEvent/command/panel";
|
import {commandPanel} from "../../boot/globalEvent/command/panel";
|
||||||
|
|
@ -88,8 +95,8 @@ export const initRightMenu = (app: App) => {
|
||||||
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuHistory">
|
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuHistory">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconHistory"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dataHistory}</span>
|
<svg class="b3-menu__icon"><use xlink:href="#iconHistory"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dataHistory}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-menu__separator${(isInAndroid() || isInIOS()) ? "" : " fn__none"}"></div>
|
<div class="b3-menu__separator${(isInAndroid() || isInIOS() || isInHarmony()) ? "" : " fn__none"}"></div>
|
||||||
<div class="b3-menu__item b3-menu__item--warning${(isInAndroid() || isInIOS()) ? "" : " fn__none"}" id="menuSafeQuit">
|
<div class="b3-menu__item b3-menu__item--warning${(isInAndroid() || isInIOS() || isInHarmony()) ? "" : " fn__none"}" id="menuSafeQuit">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconQuit"></use></svg><span class="b3-menu__label">${window.siyuan.languages.safeQuit}</span>
|
<svg class="b3-menu__icon"><use xlink:href="#iconQuit"></use></svg><span class="b3-menu__label">${window.siyuan.languages.safeQuit}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-menu__separator"></div>
|
<div class="b3-menu__separator"></div>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import {Dialog} from "../../dialog";
|
||||||
import {fetchPost} from "../../util/fetch";
|
import {fetchPost} from "../../util/fetch";
|
||||||
import {confirmDialog} from "../../dialog/confirmDialog";
|
import {confirmDialog} from "../../dialog/confirmDialog";
|
||||||
import {showMessage} from "../../dialog/message";
|
import {showMessage} from "../../dialog/message";
|
||||||
import {isInAndroid, isInIOS, isIPad, openByMobile, writeText} from "../../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, isInIOS, isIPad, openByMobile, writeText} from "../../protyle/util/compatibility";
|
||||||
import {exitSiYuan, processSync} from "../../dialog/processSystem";
|
import {exitSiYuan, processSync} from "../../dialog/processSystem";
|
||||||
import {pathPosix} from "../../util/pathName";
|
import {pathPosix} from "../../util/pathName";
|
||||||
import {openModel} from "../menu/model";
|
import {openModel} from "../menu/model";
|
||||||
|
|
@ -40,7 +40,7 @@ export const initAbout = () => {
|
||||||
<div class="fn__hr"></div>
|
<div class="fn__hr"></div>
|
||||||
<div class="b3-label__text">${window.siyuan.languages.about18}</div>
|
<div class="b3-label__text">${window.siyuan.languages.about18}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-label${(window.siyuan.config.readonly || (isBrowser() && !isInIOS() && !isInAndroid() && !isIPad())) ? " fn__none" : ""}">
|
<div class="b3-label${(window.siyuan.config.readonly || (isBrowser() && !isInIOS() && !isInAndroid() && !isIPad() && !isInHarmony())) ? " fn__none" : ""}">
|
||||||
${window.siyuan.languages.about5}
|
${window.siyuan.languages.about5}
|
||||||
<div class="fn__hr"></div>
|
<div class="fn__hr"></div>
|
||||||
<button class="b3-button b3-button--outline fn__block" id="authCode">
|
<button class="b3-button b3-button--outline fn__block" id="authCode">
|
||||||
|
|
@ -136,7 +136,7 @@ export const initAbout = () => {
|
||||||
</button>
|
</button>
|
||||||
<div class="b3-label__text">${window.siyuan.languages.importConfTip}</div>
|
<div class="b3-label__text">${window.siyuan.languages.importConfTip}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-label${(!window.siyuan.config.readonly && (isInAndroid() || isInIOS())) ? "" : " fn__none"}">
|
<div class="b3-label${(!window.siyuan.config.readonly && (isInAndroid() || isInIOS() || isInHarmony())) ? "" : " fn__none"}">
|
||||||
${window.siyuan.languages.workspaceList}
|
${window.siyuan.languages.workspaceList}
|
||||||
<div class="fn__hr"></div>
|
<div class="fn__hr"></div>
|
||||||
<button id="openWorkspace" class="b3-button b3-button--outline fn__block">${window.siyuan.languages.openBy}...</button>
|
<button id="openWorkspace" class="b3-button b3-button--outline fn__block">${window.siyuan.languages.openBy}...</button>
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ import {Menu} from "../../plugin/Menu";
|
||||||
import {getNoContainerElement} from "../wysiwyg/getBlock";
|
import {getNoContainerElement} from "../wysiwyg/getBlock";
|
||||||
import {openTitleMenu} from "../header/openTitleMenu";
|
import {openTitleMenu} from "../header/openTitleMenu";
|
||||||
import {emitOpenMenu} from "../../plugin/EventBus";
|
import {emitOpenMenu} from "../../plugin/EventBus";
|
||||||
import {isInAndroid, isIPad, isMac, updateHotkeyTip} from "../util/compatibility";
|
import {isInAndroid, isInHarmony, isIPad, isMac, updateHotkeyTip} from "../util/compatibility";
|
||||||
import {resize} from "../util/resize";
|
import {resize} from "../util/resize";
|
||||||
import {listIndent, listOutdent} from "../wysiwyg/list";
|
import {listIndent, listOutdent} from "../wysiwyg/list";
|
||||||
import {improveBreadcrumbAppearance} from "../wysiwyg/renderBacklink";
|
import {improveBreadcrumbAppearance} from "../wysiwyg/renderBacklink";
|
||||||
|
|
@ -44,7 +44,7 @@ export class Breadcrumb {
|
||||||
element.className = "protyle-breadcrumb";
|
element.className = "protyle-breadcrumb";
|
||||||
let padHTML = "";
|
let padHTML = "";
|
||||||
/// #if BROWSER && !MOBILE
|
/// #if BROWSER && !MOBILE
|
||||||
if (isIPad() || isInAndroid()) {
|
if (isIPad() || isInAndroid() || isInHarmony()) {
|
||||||
padHTML = `<button class="block__icon fn__flex-center ariaLabel" disabled aria-label="${window.siyuan.languages.undo}" data-type="undo"><svg><use xlink:href="#iconUndo"></use></svg></button>
|
padHTML = `<button class="block__icon fn__flex-center ariaLabel" disabled aria-label="${window.siyuan.languages.undo}" data-type="undo"><svg><use xlink:href="#iconUndo"></use></svg></button>
|
||||||
<button class="block__icon fn__flex-center ariaLabel" disabled aria-label="${window.siyuan.languages.redo}" data-type="redo"><svg><use xlink:href="#iconRedo"></use></svg></button>
|
<button class="block__icon fn__flex-center ariaLabel" disabled aria-label="${window.siyuan.languages.redo}" data-type="redo"><svg><use xlink:href="#iconRedo"></use></svg></button>
|
||||||
<button class="block__icon fn__flex-center ariaLabel" disabled aria-label="${window.siyuan.languages.outdent}" data-type="outdent"><svg><use xlink:href="#iconOutdent"></use></svg></button>
|
<button class="block__icon fn__flex-center ariaLabel" disabled aria-label="${window.siyuan.languages.outdent}" data-type="outdent"><svg><use xlink:href="#iconOutdent"></use></svg></button>
|
||||||
|
|
@ -295,7 +295,7 @@ ${padHTML}
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
});
|
});
|
||||||
window.siyuan.menus.menu.append(uploadMenu);
|
window.siyuan.menus.menu.append(uploadMenu);
|
||||||
if (!isInAndroid()) {
|
if (!isInAndroid() && !isInHarmony()) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: this.mediaRecorder?.isRecording ? "endRecord" : "startRecord",
|
id: this.mediaRecorder?.isRecording ? "endRecord" : "startRecord",
|
||||||
current: this.mediaRecorder && this.mediaRecorder.isRecording,
|
current: this.mediaRecorder && this.mediaRecorder.isRecording,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ import {
|
||||||
hasClosestByClassName,
|
hasClosestByClassName,
|
||||||
hasClosestByMatchTag,
|
hasClosestByMatchTag,
|
||||||
hasClosestByTag,
|
hasClosestByTag,
|
||||||
hasTopClosestByClassName, isInEmbedBlock
|
hasTopClosestByClassName,
|
||||||
|
isInEmbedBlock
|
||||||
} from "../util/hasClosest";
|
} from "../util/hasClosest";
|
||||||
import {getIconByType} from "../../editor/getIcon";
|
import {getIconByType} from "../../editor/getIcon";
|
||||||
import {enterBack, iframeMenu, setFold, tableMenu, videoMenu, zoomOut} from "../../menus/protyle";
|
import {enterBack, iframeMenu, setFold, tableMenu, videoMenu, zoomOut} from "../../menus/protyle";
|
||||||
|
|
@ -12,6 +13,7 @@ import {copySubMenu, openAttr, openFileAttr, openWechatNotify} from "../../menus
|
||||||
import {
|
import {
|
||||||
copyPlainText,
|
copyPlainText,
|
||||||
isInAndroid,
|
isInAndroid,
|
||||||
|
isInHarmony,
|
||||||
isMac,
|
isMac,
|
||||||
isOnlyMeta,
|
isOnlyMeta,
|
||||||
openByMobile,
|
openByMobile,
|
||||||
|
|
@ -21,7 +23,8 @@ import {
|
||||||
import {
|
import {
|
||||||
transaction,
|
transaction,
|
||||||
turnsIntoOneTransaction,
|
turnsIntoOneTransaction,
|
||||||
turnsIntoTransaction, turnsOneInto,
|
turnsIntoTransaction,
|
||||||
|
turnsOneInto,
|
||||||
updateBatchTransaction,
|
updateBatchTransaction,
|
||||||
updateTransaction
|
updateTransaction
|
||||||
} from "../wysiwyg/transaction";
|
} from "../wysiwyg/transaction";
|
||||||
|
|
@ -33,13 +36,7 @@ import {blockRender} from "../render/blockRender";
|
||||||
import {getContenteditableElement, getTopAloneElement, isNotEditBlock} from "../wysiwyg/getBlock";
|
import {getContenteditableElement, getTopAloneElement, isNotEditBlock} from "../wysiwyg/getBlock";
|
||||||
import * as dayjs from "dayjs";
|
import * as dayjs from "dayjs";
|
||||||
import {fetchPost} from "../../util/fetch";
|
import {fetchPost} from "../../util/fetch";
|
||||||
import {
|
import {cancelSB, genEmptyElement, getLangByType, insertEmptyBlock, jumpToParent,} from "../../block/util";
|
||||||
cancelSB,
|
|
||||||
genEmptyElement,
|
|
||||||
getLangByType,
|
|
||||||
insertEmptyBlock,
|
|
||||||
jumpToParent,
|
|
||||||
} from "../../block/util";
|
|
||||||
import {countBlockWord} from "../../layout/status";
|
import {countBlockWord} from "../../layout/status";
|
||||||
import {Constants} from "../../constants";
|
import {Constants} from "../../constants";
|
||||||
import {mathRender} from "../render/mathRender";
|
import {mathRender} from "../render/mathRender";
|
||||||
|
|
@ -1656,7 +1653,7 @@ export class Gutter {
|
||||||
label: `${window.siyuan.languages.copy} ${window.siyuan.languages.headings1}`,
|
label: `${window.siyuan.languages.copy} ${window.siyuan.languages.headings1}`,
|
||||||
click() {
|
click() {
|
||||||
fetchPost("/api/block/getHeadingChildrenDOM", {id}, (response) => {
|
fetchPost("/api/block/getHeadingChildrenDOM", {id}, (response) => {
|
||||||
if (isInAndroid()) {
|
if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.writeHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
window.JSAndroid.writeHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
||||||
} else {
|
} else {
|
||||||
writeText(response.data + Constants.ZWSP);
|
writeText(response.data + Constants.ZWSP);
|
||||||
|
|
@ -1670,7 +1667,7 @@ export class Gutter {
|
||||||
label: `${window.siyuan.languages.cut} ${window.siyuan.languages.headings1}`,
|
label: `${window.siyuan.languages.cut} ${window.siyuan.languages.headings1}`,
|
||||||
click() {
|
click() {
|
||||||
fetchPost("/api/block/getHeadingChildrenDOM", {id}, (response) => {
|
fetchPost("/api/block/getHeadingChildrenDOM", {id}, (response) => {
|
||||||
if (isInAndroid()) {
|
if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.writeHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
window.JSAndroid.writeHTMLClipboard(protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
||||||
} else {
|
} else {
|
||||||
writeText(response.data + Constants.ZWSP);
|
writeText(response.data + Constants.ZWSP);
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ export const openByMobile = (uri: string) => {
|
||||||
window.webkit.messageHandlers.openLink.postMessage("https://" + uri);
|
window.webkit.messageHandlers.openLink.postMessage("https://" + uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (isInAndroid()) {
|
} else if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.openExternal(uri);
|
window.JSAndroid.openExternal(uri);
|
||||||
} else {
|
} else {
|
||||||
window.open(uri);
|
window.open(uri);
|
||||||
|
|
@ -29,7 +29,7 @@ export const openByMobile = (uri: string) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const readText = () => {
|
export const readText = () => {
|
||||||
if (isInAndroid()) {
|
if (isInAndroid() || isInHarmony()) {
|
||||||
return window.JSAndroid.readClipboard();
|
return window.JSAndroid.readClipboard();
|
||||||
}
|
}
|
||||||
return navigator.clipboard.readText();
|
return navigator.clipboard.readText();
|
||||||
|
|
@ -42,7 +42,7 @@ export const writeText = (text: string) => {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
// navigator.clipboard.writeText 抛出异常不进入 catch,这里需要先处理移动端复制
|
// navigator.clipboard.writeText 抛出异常不进入 catch,这里需要先处理移动端复制
|
||||||
if (isInAndroid()) {
|
if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.writeClipboard(text);
|
window.JSAndroid.writeClipboard(text);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -54,7 +54,7 @@ export const writeText = (text: string) => {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (isInIOS()) {
|
if (isInIOS()) {
|
||||||
window.webkit.messageHandlers.setClipboard.postMessage(text);
|
window.webkit.messageHandlers.setClipboard.postMessage(text);
|
||||||
} else if (isInAndroid()) {
|
} else if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.writeClipboard(text);
|
window.JSAndroid.writeClipboard(text);
|
||||||
} else {
|
} else {
|
||||||
const textElement = document.createElement("textarea");
|
const textElement = document.createElement("textarea");
|
||||||
|
|
@ -136,6 +136,10 @@ export const isInIOS = () => {
|
||||||
return window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers;
|
return window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const isInHarmony = () => {
|
||||||
|
return window.siyuan.config.system.container === "harmony";
|
||||||
|
}
|
||||||
|
|
||||||
// Mac,Windows 快捷键展示
|
// Mac,Windows 快捷键展示
|
||||||
export const updateHotkeyTip = (hotkey: string) => {
|
export const updateHotkeyTip = (hotkey: string) => {
|
||||||
if (isMac()) {
|
if (isMac()) {
|
||||||
|
|
|
||||||
3
app/src/types/config.d.ts
vendored
3
app/src/types/config.d.ts
vendored
|
|
@ -1540,9 +1540,10 @@ declare namespace Config {
|
||||||
* - `docker`: Docker container
|
* - `docker`: Docker container
|
||||||
* - `android`: Android device
|
* - `android`: Android device
|
||||||
* - `ios`: iOS device
|
* - `ios`: iOS device
|
||||||
|
* - `harmony`: HarmonyOS device
|
||||||
* - `std`: Desktop Electron environment
|
* - `std`: Desktop Electron environment
|
||||||
*/
|
*/
|
||||||
export type TSystemContainer = "docker" | "android" | "ios" | "std";
|
export type TSystemContainer = "docker" | "android" | "ios" | "harmony" | "std";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SiYuan Network proxy configuration
|
* SiYuan Network proxy configuration
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import {exportLayout} from "../layout/util";
|
||||||
/// #endif
|
/// #endif
|
||||||
import {fetchPost} from "./fetch";
|
import {fetchPost} from "./fetch";
|
||||||
import {appearance} from "../config/appearance";
|
import {appearance} from "../config/appearance";
|
||||||
import {isInAndroid, isInIOS} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, isInIOS} from "../protyle/util/compatibility";
|
||||||
|
|
||||||
const loadThirdIcon = (iconURL: string, data: Config.IAppearance) => {
|
const loadThirdIcon = (iconURL: string, data: Config.IAppearance) => {
|
||||||
addScript(iconURL, "iconDefaultScript").then(() => {
|
addScript(iconURL, "iconDefaultScript").then(() => {
|
||||||
|
|
@ -329,7 +329,7 @@ const rgba2hex = (rgba: string) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
const updateMobileTheme = (OSTheme: string) => {
|
const updateMobileTheme = (OSTheme: string) => {
|
||||||
if (isInIOS() || isInAndroid()) {
|
if (isInIOS() || isInAndroid() || isInHarmony()) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
const backgroundColor = rgba2hex(getComputedStyle(document.body).getPropertyValue("--b3-theme-background").trim());
|
const backgroundColor = rgba2hex(getComputedStyle(document.body).getPropertyValue("--b3-theme-background").trim());
|
||||||
let mode = window.siyuan.config.appearance.mode;
|
let mode = window.siyuan.config.appearance.mode;
|
||||||
|
|
@ -342,7 +342,7 @@ const updateMobileTheme = (OSTheme: string) => {
|
||||||
}
|
}
|
||||||
if (isInIOS()) {
|
if (isInIOS()) {
|
||||||
window.webkit.messageHandlers.changeStatusBar.postMessage((backgroundColor || (mode === 0 ? "#fff" : "#1e1e1e")) + " " + mode);
|
window.webkit.messageHandlers.changeStatusBar.postMessage((backgroundColor || (mode === 0 ? "#fff" : "#1e1e1e")) + " " + mode);
|
||||||
} else if (isInAndroid()) {
|
} else if (isInAndroid() || isInHarmony()) {
|
||||||
window.JSAndroid.changeStatusBarColor(backgroundColor, mode);
|
window.JSAndroid.changeStatusBarColor(backgroundColor, mode);
|
||||||
}
|
}
|
||||||
}, 500); // 移动端需要加载完才可以获取到颜色
|
}, 500); // 移动端需要加载完才可以获取到颜色
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@ export const isMobile = () => {
|
||||||
return document.getElementById("sidebar") ? true : false;
|
return document.getElementById("sidebar") ? true : false;
|
||||||
};
|
};
|
||||||
|
|
||||||
// "windows" | "linux" | "darwin" | "docker" | "android" | "ios"
|
// "windows" | "linux" | "darwin" | "docker" | "android" | "ios" | "harmony"
|
||||||
export const getBackend = () => {
|
export const getBackend = () => {
|
||||||
if (["docker", "ios", "android"].includes(window.siyuan.config.system.container)) {
|
if (["docker", "ios", "android", "harmony"].includes(window.siyuan.config.system.container)) {
|
||||||
return window.siyuan.config.system.container;
|
return window.siyuan.config.system.container;
|
||||||
} else {
|
} else {
|
||||||
return window.siyuan.config.system.os;
|
return window.siyuan.config.system.os;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue