From c618a2f38bb9b1ac45d09eec9aa5f93d8d4fd7e5 Mon Sep 17 00:00:00 2001 From: JayBridge <12310903@mail.sustech.edu.cn> Date: Mon, 14 Apr 2025 11:19:34 +0800 Subject: [PATCH 01/14] feat: select-share-menu (#211) --- package.json | 4 +- src/.vitepress/theme/index.ts | 4 + src/components/Layout.vue | 15 ++ src/components/SelectionShareMenu.vue | 184 +++++++++++++++++++ src/components/ShareCard.vue | 244 ++++++++++++++++++++++++++ 5 files changed, 450 insertions(+), 1 deletion(-) create mode 100644 src/components/Layout.vue create mode 100644 src/components/SelectionShareMenu.vue create mode 100644 src/components/ShareCard.vue diff --git a/package.json b/package.json index 76e5f774..6ce80dd8 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,9 @@ }, "dependencies": { "@primeuix/themes": "^1.0.3", - "primevue": "^4.3.3" + "dom-to-image-more": "^3.5.0", + "primevue": "^4.3.3", + "qrcodejs2": "^0.0.2" }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^5.2.2", diff --git a/src/.vitepress/theme/index.ts b/src/.vitepress/theme/index.ts index 8a041ca5..1073678b 100644 --- a/src/.vitepress/theme/index.ts +++ b/src/.vitepress/theme/index.ts @@ -5,11 +5,14 @@ import DefaultTheme from "vitepress/theme"; import Aura from "@primeuix/themes/aura"; import PrimeVue from "primevue/config"; +import Layout from "../../components/Layout.vue"; import PostList from "../../components/PostList.vue"; +import SelectionShareMenu from "../../components/SelectionShareMenu.vue"; import "./style.css"; export default { extends: DefaultTheme, + Layout, enhanceApp({ app, router }) { /* redirect legacy hash path, can only be done on client side */ router.onAfterRouteChange = async (to) => { @@ -25,5 +28,6 @@ export default { /* register global components */ app.component("PostList", PostList); + app.component("SelectionShareMenu", SelectionShareMenu); }, } satisfies Theme; diff --git a/src/components/Layout.vue b/src/components/Layout.vue new file mode 100644 index 00000000..b3b9d719 --- /dev/null +++ b/src/components/Layout.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/components/SelectionShareMenu.vue b/src/components/SelectionShareMenu.vue new file mode 100644 index 00000000..394bbd52 --- /dev/null +++ b/src/components/SelectionShareMenu.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/src/components/ShareCard.vue b/src/components/ShareCard.vue new file mode 100644 index 00000000..07b4099a --- /dev/null +++ b/src/components/ShareCard.vue @@ -0,0 +1,244 @@ + + + + + From 6cad1757ee544f2bc01c8b8748958074816a9fd6 Mon Sep 17 00:00:00 2001 From: JayBridge <12310903@mail.sustech.edu.cn> Date: Mon, 14 Apr 2025 11:30:54 +0800 Subject: [PATCH 02/14] feat: card-preview ShareCard.vue (#211) --- src/components/SelectionShareMenu.vue | 9 +- src/components/ShareCard.vue | 167 +++++++++++++++++++++----- 2 files changed, 143 insertions(+), 33 deletions(-) diff --git a/src/components/SelectionShareMenu.vue b/src/components/SelectionShareMenu.vue index 394bbd52..9ac58d34 100644 --- a/src/components/SelectionShareMenu.vue +++ b/src/components/SelectionShareMenu.vue @@ -41,7 +41,8 @@ const handleSelection = () => { // Handle mouseup event to detect selection const handleMouseUp = () => { - if (typeof window === "undefined") return; + // 如果分享卡片已显示,不再监听选择变化 + if (typeof window === "undefined" || shareCardVisible.value) return; setTimeout(handleSelection, 10); // Small delay to ensure selection is complete }; @@ -69,6 +70,12 @@ const shareText = () => { // Close share card const closeShareCard = () => { shareCardVisible.value = false; + // 清空选中的文本,以便用户可以重新选择 + setTimeout(() => { + if (typeof window !== "undefined") { + window.getSelection()?.removeAllRanges(); + } + }, 100); }; // Click outside to hide menu diff --git a/src/components/ShareCard.vue b/src/components/ShareCard.vue index 07b4099a..e893ebad 100644 --- a/src/components/ShareCard.vue +++ b/src/components/ShareCard.vue @@ -1,5 +1,5 @@