Skip to content

Commit 0ca4a04

Browse files
committed
Ignore stale copy results after page changes
Reset copy feedback when the docs page retargets and ignore clipboard results that complete after a newer route update. This keeps copy status messages from leaking across VitePress SPA navigation. fedify-dev#715 (comment) Assisted-by: Codex:gpt-5.4
1 parent 66d4224 commit 0ca4a04

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

docs/.vitepress/theme/components/PageMarkdownActions.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ function waitForHeading(maxFrames = 8): Promise<Element | null> {
9191
async function updateTarget(): Promise<void> {
9292
const version = ++targetUpdateVersion;
9393
targetReady.value = false;
94+
copied.value = false;
95+
copyFailed.value = null;
9496
cleanupTarget();
9597
await nextTick();
9698
const heading = await waitForHeading();
@@ -141,6 +143,7 @@ async function getMarkdown(): Promise<string> {
141143
}
142144
143145
async function copyMarkdown(event: MouseEvent): Promise<void> {
146+
const version = targetUpdateVersion;
144147
if (isDev) {
145148
closeMenu(event);
146149
window.alert(devMessage);
@@ -151,6 +154,7 @@ async function copyMarkdown(event: MouseEvent): Promise<void> {
151154
try {
152155
await navigator.clipboard.writeText(text);
153156
} catch {
157+
if (version !== targetUpdateVersion) return;
154158
copied.value = false;
155159
copyFailed.value = "clipboard";
156160
if (copiedResetTimeout != null) {
@@ -160,6 +164,7 @@ async function copyMarkdown(event: MouseEvent): Promise<void> {
160164
resetCopyFailedState(2500);
161165
return;
162166
}
167+
if (version !== targetUpdateVersion) return;
163168
copied.value = true;
164169
copyFailed.value = null;
165170
if (copyFailedResetTimeout != null) {
@@ -169,6 +174,7 @@ async function copyMarkdown(event: MouseEvent): Promise<void> {
169174
resetCopiedState(2000);
170175
closeMenu(event);
171176
} catch {
177+
if (version !== targetUpdateVersion) return;
172178
copied.value = false;
173179
copyFailed.value = "load";
174180
if (copiedResetTimeout != null) {

0 commit comments

Comments
 (0)