utils.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { showToast } from "./components/ui-lib";
  2. import Locale from "./locales";
  3. export function trimTopic(topic: string) {
  4. const s = topic.split("");
  5. let lastChar = s.at(-1); // 获取 s 的最后一个字符
  6. let pattern = /[,。!?、,.!?]/; // 定义匹配中文和英文标点符号的正则表达式
  7. while (lastChar && pattern.test(lastChar!)) {
  8. s.pop();
  9. lastChar = s.at(-1);
  10. }
  11. return s.join("");
  12. }
  13. export function copyToClipboard(text: string) {
  14. navigator.clipboard
  15. .writeText(text)
  16. .then((res) => {
  17. showToast(Locale.Copy.Success);
  18. })
  19. .catch((err) => {
  20. showToast(Locale.Copy.Failed);
  21. });
  22. }
  23. export function downloadAs(text: string, filename: string) {
  24. const element = document.createElement("a");
  25. element.setAttribute(
  26. "href",
  27. "data:text/plain;charset=utf-8," + encodeURIComponent(text),
  28. );
  29. element.setAttribute("download", filename);
  30. element.style.display = "none";
  31. document.body.appendChild(element);
  32. element.click();
  33. document.body.removeChild(element);
  34. }
  35. export function isIOS() {
  36. const userAgent = navigator.userAgent.toLowerCase();
  37. return /iphone|ipad|ipod/.test(userAgent);
  38. }
  39. export function isMobileScreen() {
  40. return window.innerWidth <= 600;
  41. }
  42. export function selectOrCopy(el: HTMLElement, content: string) {
  43. const currentSelection = window.getSelection();
  44. if (currentSelection?.type === "Range") {
  45. return false;
  46. }
  47. copyToClipboard(content);
  48. return true;
  49. }
  50. export function queryMeta(key: string, defaultValue?: string): string {
  51. let ret: string;
  52. if (document) {
  53. const meta = document.head.querySelector(
  54. `meta[name='${key}']`,
  55. ) as HTMLMetaElement;
  56. ret = meta?.content ?? "";
  57. } else {
  58. ret = defaultValue ?? "";
  59. }
  60. return ret;
  61. }
  62. let currentId: string;
  63. export function getCurrentVersion() {
  64. if (currentId) {
  65. return currentId;
  66. }
  67. currentId = queryMeta("version");
  68. return currentId;
  69. }