Skip to content

Commit 7b090b5

Browse files
committed
centralize email copy rigging
1 parent 6fe1268 commit 7b090b5

File tree

3 files changed

+22
-22
lines changed

3 files changed

+22
-22
lines changed

src/lib/components/footer.svelte

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
<script lang="ts">
2-
import { PUBLIC_EMAIL } from '$env/static/public';
32
import { nav } from '$lib/data/nav';
43
import { links } from '$lib/data/profile';
4+
import { email } from '$lib/rigs/email.svelte';
55
import { getLinkAttributes } from '$lib/rigs/link.svelte';
66
import { ArrowUp, CopyCheck, Mail } from 'lucide-svelte';
77
import Ripple from './ripple.svelte';
8-
9-
let copied = $state<ReturnType<typeof setTimeout>>();
108
</script>
119

1210
<footer
@@ -51,14 +49,8 @@
5149
{/each}
5250
<button
5351
class="button-ghost aspect-square cursor-copy"
54-
aria-pressed={copied != null || undefined}
55-
onpointerdown={() => {
56-
navigator.clipboard.writeText(PUBLIC_EMAIL);
57-
clearTimeout(copied);
58-
copied = setTimeout(() => {
59-
copied = undefined;
60-
}, 1500);
61-
}}
52+
aria-pressed={email.copied != null || undefined}
53+
onpointerdown={email.copy}
6254
>
6355
<Ripple />
6456
<Mail

src/lib/rigs/email.svelte.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { PUBLIC_EMAIL } from '$env/static/public';
2+
3+
let copied = $state<ReturnType<typeof setTimeout>>();
4+
5+
export const email = {
6+
get copied() {
7+
return copied;
8+
},
9+
copy() {
10+
navigator.clipboard.writeText(PUBLIC_EMAIL);
11+
clearTimeout(copied);
12+
copied = setTimeout(() => {
13+
copied = undefined;
14+
}, 1500);
15+
},
16+
};

src/routes/(site)/skills.svelte

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
<script lang="ts">
2-
import { PUBLIC_EMAIL } from '$env/static/public';
32
import { tags_details } from '$lib/data/meta';
43
import { skills } from '$lib/data/profile';
4+
import { email } from '$lib/rigs/email.svelte';
55
import * as m from '$messages';
66
import { AtSign, CopyCheck, Send } from 'lucide-svelte';
77
import { on } from 'svelte/events';
88
99
const phrases = m.skills_phrases().split(/(?<=,)/);
10-
11-
let copied = $state<ReturnType<typeof setTimeout>>();
1210
</script>
1311

1412
<section
@@ -113,15 +111,9 @@
113111
</li>
114112
</ul>
115113
<button
116-
aria-pressed={copied != null || undefined}
114+
aria-pressed={email.copied != null || undefined}
117115
class="group flex cursor-copy items-center gap-[1em] self-end"
118-
onpointerdown={() => {
119-
navigator.clipboard.writeText(PUBLIC_EMAIL);
120-
clearTimeout(copied);
121-
copied = setTimeout(() => {
122-
copied = undefined;
123-
}, 1500);
124-
}}
116+
onpointerdown={email.copy}
125117
>
126118
<div class="button-cta">
127119
<span

0 commit comments

Comments
 (0)