siyuan/app/src/protyle/util/compatibility.ts

87 lines
2.8 KiB
TypeScript
Raw Normal View History

export const writeText = async (text: string) => {
try {
navigator.clipboard.writeText(text);
} catch (e) {
if (window.siyuan.config.system.container === "ios" && window.webkit?.messageHandlers) {
window.webkit.messageHandlers.setClipboard.postMessage(text);
} else if (window.siyuan.config.system.container === "android" && window.JSAndroid) {
window.JSAndroid.writeClipboard(text);
} else {
const textElement = document.createElement("textarea");
textElement.value = text;
textElement.style.position = "fixed"; //avoid scrolling to bottom
document.body.appendChild(textElement);
textElement.focus();
textElement.select();
document.execCommand("copy");
document.body.removeChild(textElement);
}
}
};
// 用户 iPhone 点击延迟/需要双击的处理
export const getEventName = () => {
if (navigator.userAgent.indexOf("iPhone") > -1) {
return "touchstart";
} else {
return "click";
}
};
// 区别 mac 上的 ctrl 和 meta
export const isCtrl = (event: KeyboardEvent) => {
if (isMac()) {
// mac
if (event.metaKey && !event.ctrlKey) {
return true;
}
return false;
} else {
if (!event.metaKey && event.ctrlKey) {
return true;
}
return false;
}
};
export const isMac = () => {
return navigator.platform.toUpperCase().indexOf("MAC") > -1;
};
// MacWindows 快捷键展示
export const updateHotkeyTip = (hotkey: string) => {
if (/Mac/.test(navigator.platform) || navigator.platform === "iPhone") {
return hotkey;
}
if (hotkey.startsWith("⌘")) {
hotkey = hotkey.replace("⌘", "⌘+");
} else if (hotkey.startsWith("⌥") && hotkey.substr(1, 1) !== "⌘") {
hotkey = hotkey.replace("⌥", "⌥+");
} else if (hotkey.startsWith("⇧⌘") || hotkey.startsWith("⌥⌘")) {
hotkey = hotkey.replace("⇧⌘", "⌘+⇧+").replace("⌥⌘", "⌘+⌥+");
} else if (hotkey.startsWith("⇧")) {
hotkey = hotkey.replace("⇧", "⇧+");
}
hotkey = hotkey.replace("⌘", "Ctrl").replace("⇧", "Shift")
.replace("⌥", "Alt").replace("⇥", "Tab")
.replace("⌫", "Backspace").replace("⌦", "Delete");
if (hotkey.indexOf("Shift") > -1) {
hotkey = hotkey.replace(";", ":").replace("=", "+").replace("-", "_").replace(".", ">");
}
return hotkey;
};
export const hotKey2Electron = (key: string) => {
let electronKey = "";
if (key.indexOf("⌘") > -1) {
electronKey += "CommandOrControl+";
}
if (key.indexOf("⇧") > -1) {
electronKey += "Shift+";
}
if (key.indexOf("⌥") > -1) {
electronKey += "Alt+";
}
return electronKey + key.substr(key.length - 1);
};