import { EmojiStyle } from "emoji-picker-react"; import { showToast } from "./components/ui-lib"; import Locale from "./locales"; export function trimTopic(topic: string) { return topic.replace(/[,。!?”“"、,.!?]*$/, ""); } export async function copyToClipboard(text: string) { try { await navigator.clipboard.writeText(text); } catch (error) { const textarea = document.createElement("textarea"); textarea.value = text; document.body.appendChild(textarea); textarea.select(); document.execCommand("copy"); document.body.removeChild(textarea); } finally { showToast(Locale.Copy.Success); } } export function downloadAs(text: string, filename: string) { const element = document.createElement("a"); element.setAttribute( "href", "data:text/plain;charset=utf-8," + encodeURIComponent(text), ); element.setAttribute("download", filename); element.style.display = "none"; document.body.appendChild(element); element.click(); document.body.removeChild(element); } export function isIOS() { const userAgent = navigator.userAgent.toLowerCase(); return /iphone|ipad|ipod/.test(userAgent); } export function isMobileScreen() { return window.innerWidth <= 600; } export function selectOrCopy(el: HTMLElement, content: string) { const currentSelection = window.getSelection(); if (currentSelection?.type === "Range") { return false; } copyToClipboard(content); return true; } export function queryMeta(key: string, defaultValue?: string): string { let ret: string; if (document) { const meta = document.head.querySelector( `meta[name='${key}']`, ) as HTMLMetaElement; ret = meta?.content ?? ""; } else { ret = defaultValue ?? ""; } return ret; } let currentId: string; export function getCurrentVersion() { if (currentId) { return currentId; } currentId = queryMeta("version"); return currentId; } export function getEmojiUrl(unified: string, style: EmojiStyle) { return `https://cdn.staticfile.org/emoji-datasource-apple/14.0.0/img/${style}/64/${unified}.png`; }