This commit is contained in:
Vanessa 2023-09-05 16:12:29 +08:00
parent 830c8b55cf
commit 360b5e2cca
12 changed files with 47 additions and 33 deletions

View file

@ -7,7 +7,7 @@ import {fetchPost} from "../util/fetch";
import {setAccessAuthCode, setProxy} from "./util/about";
import {exportLayout} from "../layout/util";
import {exitSiYuan, processSync} from "../dialog/processSystem";
import {openByMobile, writeText} from "../protyle/util/compatibility";
import {isInAndroid, isInIOS, openByMobile, writeText} from "../protyle/util/compatibility";
import {showMessage} from "../dialog/message";
import {Dialog} from "../dialog";
import {confirmDialog} from "../dialog/confirmDialog";
@ -149,7 +149,7 @@ export const about = {
<svg><use xlink:href="#iconRefresh"></use></svg>${window.siyuan.languages.checkUpdate}
</button>
<div class="fn__hr${isBrowser() ? "" : " fn__none"}"></div>
<button id="menuSafeQuit" class="b3-button b3-button--outline fn__block${(window.webkit?.messageHandlers || window.JSAndroid) ? "" : " fn__none"}">
<button id="menuSafeQuit" class="b3-button b3-button--outline fn__block${(isInIOS() || isInAndroid()) ? "" : " fn__none"}">
<svg><use xlink:href="#iconQuit"></use></svg>${window.siyuan.languages.safeQuit}
</button>
</div>

View file

@ -22,6 +22,7 @@ import {setEmpty} from "../mobile/util/setEmpty";
import {hideElements} from "../protyle/ui/hideElements";
import {App} from "../index";
import {saveScroll} from "../protyle/scroll/saveScroll";
import {isInAndroid, isInIOS} from "../protyle/util/compatibility";
const updateTitle = (rootID: string, tab: Tab) => {
fetchPost("/api/block/getDocInfo", {
@ -141,7 +142,7 @@ export const kernelError = () => {
return;
}
let iosReStart = "";
if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) {
if (isInIOS()) {
iosReStart = `<div class="fn__hr"></div><div class="fn__flex"><div class="fn__flex-1"></div><button class="b3-button">${window.siyuan.languages.retry}</button></div>`;
}
const dialog = new Dialog({
@ -181,7 +182,7 @@ export const exitSiYuan = () => {
/// #if !BROWSER
ipcRenderer.send(Constants.SIYUAN_QUIT, location.port);
/// #else
if (["ios", "android"].includes(window.siyuan.config.system.container) && (window.webkit?.messageHandlers || window.JSAndroid)) {
if (isInIOS() || isInAndroid()) {
window.location.href = "siyuan://api/system/exit";
}
/// #endif
@ -221,7 +222,7 @@ export const exitSiYuan = () => {
/// #if !BROWSER
ipcRenderer.send(Constants.SIYUAN_QUIT, location.port);
/// #else
if (["ios", "android"].includes(window.siyuan.config.system.container) && (window.webkit?.messageHandlers || window.JSAndroid)) {
if (isInIOS() || isInAndroid()) {
window.location.href = "siyuan://api/system/exit";
}
/// #endif

View file

@ -11,7 +11,7 @@ import {Constants} from "../constants";
import {openNewWindowById} from "../window/openNewWindow";
import {MenuItem} from "./Menu";
import {App} from "../index";
import {updateHotkeyTip} from "../protyle/util/compatibility";
import {isInAndroid, updateHotkeyTip} from "../protyle/util/compatibility";
export const exportAsset = (src: string) => {
/// #if !BROWSER
@ -105,7 +105,7 @@ export const openEditorTab = (app: App, id: string, notebookId?: string, pathStr
};
export const copyPNG = (imgElement: HTMLImageElement) => {
if ("android" === window.siyuan.config.system.container && window.JSAndroid) {
if (isInAndroid()) {
window.JSAndroid.writeImageClipboard(imgElement.getAttribute("src"));
return;
} else {

View file

@ -8,7 +8,7 @@ import {getOpenNotebookCount, originalPath, pathPosix} from "../util/pathName";
import {mountHelp, newDailyNote} from "../util/mount";
import {fetchPost} from "../util/fetch";
import {Constants} from "../constants";
import {setStorageVal, writeText} from "../protyle/util/compatibility";
import {isInAndroid, isInIOS, setStorageVal, writeText} from "../protyle/util/compatibility";
import {openCard} from "../card/openCard";
import {openSetting} from "../config";
import {getAllDocks} from "../layout/getAll";
@ -23,6 +23,7 @@ import {Dialog} from "../dialog";
import {hasClosestByClassName} from "../protyle/util/hasClosest";
import {confirmDialog} from "../dialog/confirmDialog";
import {App} from "../index";
import {isBrowser} from "../util/functions";
const togglePinDock = (dock: Dock, icon: string) => {
return {
@ -204,12 +205,14 @@ export const workspaceMenu = (app: App, rect: DOMRect) => {
});
});
/// #endif
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.workspaceList,
icon: "iconWorkspace",
type: "submenu",
submenu: workspaceSubMenu,
}).element);
if (!isBrowser() || isInIOS() || isInAndroid()) {
window.siyuan.menus.menu.append(new MenuItem({
label: window.siyuan.languages.workspaceList,
icon: "iconWorkspace",
type: "submenu",
submenu: workspaceSubMenu,
}).element);
}
}
const layoutSubMenu: IMenu[] = [{
iconHTML: Constants.ZWSP,

View file

@ -15,7 +15,7 @@ import {bootSync} from "../dialog/processSystem";
import {initMessage, showMessage} from "../dialog/message";
import {goBack} from "./util/MobileBackFoward";
import {hideKeyboardToolbar, showKeyboardToolbar} from "./util/keyboardToolbar";
import {getLocalStorage, writeText} from "../protyle/util/compatibility";
import {getLocalStorage, isInAndroid, writeText} from "../protyle/util/compatibility";
import {openMobileFileById} from "./editor";
import {getSearch} from "../util/functions";
import {initRightMenu} from "./menu";

View file

@ -16,7 +16,7 @@ import {initAbout} from "../settings/about";
import {getRecentDocs} from "./getRecentDocs";
import {initEditor} from "../settings/editor";
import {App} from "../../index";
import {isHuawei} from "../../protyle/util/compatibility";
import {isHuawei, isInAndroid, isInIOS} from "../../protyle/util/compatibility";
export const popMenu = () => {
activeBlur();
@ -77,7 +77,7 @@ export const initRightMenu = (app: App) => {
<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>
</div>
<div class="b3-menu__item${(window.webkit?.messageHandlers || window.JSAndroid) ? "" : " fn__none"}" id="menuSafeQuit">
<div class="b3-menu__item${(isInAndroid() || isInIOS()) ? "" : " 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>
</div>
<div class="b3-menu__separator"></div>

View file

@ -4,7 +4,7 @@ import {Dialog} from "../../dialog";
import {fetchPost} from "../../util/fetch";
import {confirmDialog} from "../../dialog/confirmDialog";
import {showMessage} from "../../dialog/message";
import {openByMobile, writeText} from "../../protyle/util/compatibility";
import {isInAndroid, isInIOS, openByMobile, writeText} from "../../protyle/util/compatibility";
import {exitSiYuan, processSync} from "../../dialog/processSystem";
import {pathPosix} from "../../util/pathName";
import {openModel} from "../menu/model";
@ -118,7 +118,7 @@ export const initAbout = () => {
<div class="fn__hr"></div>
<div class="b3-label__text">${window.siyuan.languages.importDataTip}</div>
</div>
<div class="b3-label${window.siyuan.config.readonly ? " fn__none" : ""}">
<div class="b3-label${(!window.siyuan.config.readonly && (isInAndroid() || isInIOS())) ? "" : " fn__none"}">
${window.siyuan.languages.workspaceList}
<div class="fn__hr"></div>
<button id="openWorkspace" class="b3-button b3-button--outline fn__block">${window.siyuan.languages.openBy}...</button>

View file

@ -4,6 +4,7 @@ import {popMenu} from "../menu";
import {activeBlur, hideKeyboardToolbar} from "./keyboardToolbar";
import {getCurrentEditor} from "../editor";
import {fileAnnotationRefMenu, linkMenu, refMenu, tagMenu} from "../../menus/protyle";
import {isInIOS} from "../../protyle/util/compatibility";
let clientX: number;
let clientY: number;
@ -27,7 +28,7 @@ export const handleTouchEnd = (event: TouchEvent) => {
const editor = getCurrentEditor();
const target = event.target as HTMLElement;
if (editor && typeof yDiff === "undefined" && new Date().getTime() - time > 900 &&
target.tagName === "SPAN" && window.webkit?.messageHandlers &&
target.tagName === "SPAN" && isInIOS() &&
!hasClosestByAttribute(target, "data-type", "NodeBlockQueryEmbed")) {
// ios 长按行内元素弹出菜单
const types = (target.getAttribute("data-type") || "").split(" ");

View file

@ -30,6 +30,7 @@ import {Menu} from "../../plugin/Menu";
import {getNoContainerElement} from "../wysiwyg/getBlock";
import {openTitleMenu} from "../header/openTitleMenu";
import {emitOpenMenu} from "../../plugin/EventBus";
import {isInAndroid} from "../util/compatibility";
export class Breadcrumb {
public element: HTMLElement;
@ -266,7 +267,7 @@ export class Breadcrumb {
window.siyuan.menus.menu.remove();
});
window.siyuan.menus.menu.append(uploadMenu);
if (window.siyuan.config.system.container !== "android" || !window.JSAndroid) {
if (!isInAndroid()) {
window.siyuan.menus.menu.append(new MenuItem({
current: this.mediaRecorder && this.mediaRecorder.isRecording,
icon: "iconRecord",

View file

@ -8,7 +8,7 @@ export const openByMobile = (uri: string) => {
}
if (window.siyuan.config.system.container === "ios") {
window.location.href = uri;
} else if (window.siyuan.config.system.container === "android" && window.JSAndroid) {
} else if (isInAndroid()) {
window.JSAndroid.openExternal(uri);
} else {
window.open(uri);
@ -16,7 +16,7 @@ export const openByMobile = (uri: string) => {
};
export const readText = () => {
if ("android" === window.siyuan.config.system.container && window.JSAndroid) {
if (isInAndroid()) {
return window.JSAndroid.readClipboard();
}
return navigator.clipboard.readText();
@ -29,19 +29,19 @@ export const writeText = (text: string) => {
}
try {
// navigator.clipboard.writeText 抛出异常不进入 catch这里需要先处理移动端复制
if ("android" === window.siyuan.config.system.container && window.JSAndroid) {
if (isInAndroid()) {
window.JSAndroid.writeClipboard(text);
return;
}
if ("ios" === window.siyuan.config.system.container && window.webkit?.messageHandlers) {
if (isInIOS()) {
window.webkit.messageHandlers.setClipboard.postMessage(text);
return;
}
navigator.clipboard.writeText(text);
} catch (e) {
if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) {
if (isInIOS()) {
window.webkit.messageHandlers.setClipboard.postMessage(text);
} else if (window.siyuan.config.system.container === "android" && window.JSAndroid) {
} else if (isInAndroid()) {
window.JSAndroid.writeClipboard(text);
} else {
const textElement = document.createElement("textarea");
@ -97,6 +97,14 @@ export const isMac = () => {
return navigator.platform.toUpperCase().indexOf("MAC") > -1;
};
export const isInAndroid = () => {
return window.siyuan.config.system.container === "android" && window.JSAndroid
}
export const isInIOS = () => {
return window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers
}
// MacWindows 快捷键展示
export const updateHotkeyTip = (hotkey: string) => {
if (/Mac/.test(navigator.platform) || navigator.platform === "iPhone") {

View file

@ -65,7 +65,7 @@ import {openGlobalSearch} from "../../search/util";
import {popSearch} from "../../mobile/menu/search";
/// #endif
import {BlockPanel} from "../../block/Panel";
import {isCtrl, openByMobile} from "../util/compatibility";
import {isCtrl, isInAndroid, isInIOS, openByMobile} from "../util/compatibility";
import {MenuItem} from "../../menus/Menu";
import {fetchPost} from "../../util/fetch";
import {onGet} from "../util/onGet";
@ -2080,7 +2080,7 @@ export class WYSIWYG {
/// #if !MOBILE
pushBack(protyle, newRange);
/// #endif
}, (isMobile() || window.webkit?.messageHandlers) ? 520 : 0); // Android/iPad 双击慢了出不来
}, (isMobile() || isInIOS()) ? 520 : 0); // Android/iPad 双击慢了出不来
protyle.hint.enableExtend = false;
if (event.shiftKey) {
event.preventDefault();

View file

@ -7,6 +7,7 @@ import {exportLayout} from "../layout/util";
/// #endif
import {fetchPost} from "./fetch";
import {appearance} from "../config/appearance";
import {isInAndroid, isInIOS} from "../protyle/util/compatibility";
const loadThirdIcon = (iconURL: string, data: IAppearance) => {
addScript(iconURL, "iconDefaultScript").then(() => {
@ -289,8 +290,7 @@ export const setMode = (modeElementValue: number) => {
};
const updateMobileTheme = (OSTheme: string) => {
if ((window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) ||
(window.siyuan.config.system.container === "android" && window.JSAndroid)) {
if (isInIOS() || isInAndroid()) {
setTimeout(() => {
const backgroundColor = getComputedStyle(document.body).getPropertyValue("--b3-theme-background").trim();
let mode = window.siyuan.config.appearance.mode;
@ -301,9 +301,9 @@ const updateMobileTheme = (OSTheme: string) => {
mode = 0;
}
}
if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) {
if (isInIOS()) {
window.webkit.messageHandlers.changeStatusBar.postMessage((backgroundColor || (mode === 0 ? "#fff" : "#1e1e1e")) + " " + mode);
} else if (window.siyuan.config.system.container === "android" && window.JSAndroid) {
} else if (isInAndroid()) {
window.JSAndroid.changeStatusBarColor(backgroundColor, mode);
}
}, 500); // 移动端需要加载完才可以获取到颜色