Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
51 lines (42 loc) · 1.7 KB
/
Copy pathscript.js
File metadata and controls
51 lines (42 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const menuButton = document.querySelector("[data-menu-button]");
const mobileMenu = document.querySelector("[data-mobile-menu]");
if (menuButton && mobileMenu) {
const topLine = menuButton.querySelector('[data-menu-line="top"]');
const bottomLine = menuButton.querySelector('[data-menu-line="bottom"]');
const setMenuState = (isOpen) => {
mobileMenu.classList.toggle("hidden", !isOpen);
menuButton.setAttribute("aria-expanded", String(isOpen));
menuButton.setAttribute("aria-label", isOpen ? "Close menu" : "Open menu");
topLine?.classList.toggle("rotate-45", isOpen);
topLine?.classList.toggle("translate-y-0", isOpen);
bottomLine?.classList.toggle("-rotate-45", isOpen);
bottomLine?.classList.toggle("translate-y-0", isOpen);
};
menuButton.addEventListener("click", () => {
setMenuState(menuButton.getAttribute("aria-expanded") !== "true");
});
mobileMenu.querySelectorAll("a").forEach((link) => {
link.addEventListener("click", () => {
setMenuState(false);
});
});
}
const copyEmailButton = document.querySelector("[data-copy-email]");
if (copyEmailButton) {
const copyLabel = copyEmailButton.querySelector("[data-copy-label]");
const copyStatus = document.querySelector("[data-copy-status]");
copyEmailButton.addEventListener("click", async () => {
const email = copyEmailButton.dataset.email;
try {
await navigator.clipboard.writeText(email);
copyLabel.textContent = "Copied";
copyStatus.textContent = `${email} copied to clipboard`;
window.setTimeout(() => {
copyLabel.textContent = "Copy";
copyStatus.textContent = "";
}, 1800);
} catch {
window.location.href = `mailto:${email}`;
}
});
}