mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-01-03 07:18:49 +01:00
This commit is contained in:
parent
830c8b55cf
commit
360b5e2cca
12 changed files with 47 additions and 33 deletions
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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(" ");
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
// Mac,Windows 快捷键展示
|
||||
export const updateHotkeyTip = (hotkey: string) => {
|
||||
if (/Mac/.test(navigator.platform) || navigator.platform === "iPhone") {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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); // 移动端需要加载完才可以获取到颜色
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue