Skip to content

Commit

Permalink
feat(component): Share Mobicard via share sheet (#121)
Browse files Browse the repository at this point in the history
If not supported or on a desktop, copy to the clipboard.
  • Loading branch information
5ouma authored Dec 12, 2024
1 parent 7986f70 commit 5d914a2
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 14 deletions.
56 changes: 45 additions & 11 deletions src/components/Card/Card.astro
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,30 @@ const { hostname } = new URL(url);
const qrCode: string = await generateQRCode(url);
---

<a
href={url}
target="_blank"
rel="noopener noreferrer"
aria-label={`Visit ${hostname}`}
>
<button id="card" type="button" aria-label="Share your card">
<Svg id="qr" raw={qrCode} />
<div>
<Icon id="icon" name="mingcute:idcard-line" />
<Icon class="icon" id="idcard" name="mingcute:idcard-line" />
<Icon
class="icon"
id="check"
name="mingcute:checkbox-line"
display="none"
/>
<span aria-hidden="true">{hostname}</span>
</div>
</a>
</button>

<style>
a {
button {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 0.3rem;
text-decoration: none;
background: none;
border: none;
cursor: pointer;

&:hover div,
&:focus-visible div {
Expand Down Expand Up @@ -60,7 +63,7 @@ const qrCode: string = await generateQRCode(url);
transition: border-color 0.3s ease-in-out;
}

#icon {
.icon {
width: 1rem;
height: auto;
}
Expand All @@ -73,3 +76,34 @@ const qrCode: string = await generateQRCode(url);
line-height: normal;
}
</style>

<script is:inline>
const shareData = {
title: document.title,
text: document.head.querySelector('[name="description"]').content,
url: location.href,
};

document.getElementById("card").addEventListener("click", async () => {
if (
/iPhone|iPad|Android/i.test(navigator.userAgent) &&
navigator.canShare(shareData)
) {
try {
await navigator.share(shareData);
} catch (error) {
if (error.name !== "AbortError") console.error("Error sharing:", error);
}
} else {
await navigator.clipboard.writeText(shareData.url);
const [cardIcon, checkIcon] = [
document.getElementById("idcard"),
document.getElementById("check"),
];
[cardIcon.style.display, checkIcon.style.display] = ["none", "block"];
setTimeout(() => {
[cardIcon.style.display, checkIcon.style.display] = ["block", "none"];
}, 1000);
}
});
</script>
66 changes: 64 additions & 2 deletions src/components/Card/__snapshots__/Card.test.ts.snap
Original file line number Diff line number Diff line change
@@ -1,5 +1,67 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`Card > Valid URL > Default 1`] = `"<a href="https://example.com" target="_blank" rel="noopener noreferrer" aria-label="Visit example.com" data-astro-cid-nzteqis6> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" shape-rendering="crispEdges" id="qr" data-astro-cid-nzteqis6><path stroke="#000000" d="M0 0.5h7m4 0h3m2 0h1m1 0h7M0 1.5h1m5 0h1m3 0h1m2 0h4m1 0h1m5 0h1M0 2.5h1m1 0h3m1 0h1m1 0h2m1 0h1m2 0h1m3 0h1m1 0h3m1 0h1M0 3.5h1m1 0h3m1 0h1m1 0h1m4 0h3m2 0h1m1 0h3m1 0h1M0 4.5h1m1 0h3m1 0h1m1 0h3m2 0h1m2 0h1m1 0h1m1 0h3m1 0h1M0 5.5h1m5 0h1m1 0h1m2 0h1m2 0h2m2 0h1m5 0h1M0 6.5h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7M8 7.5h1m5 0h1m1 0h1M0 8.5h1m1 0h5m5 0h1m5 0h5M1 9.5h1m2 0h2m2 0h1m1 0h2m1 0h1m3 0h1m1 0h1m3 0h1M0 10.5h5m1 0h1m1 0h2m3 0h4m2 0h1m1 0h1m1 0h2M0 11.5h2m1 0h3m2 0h1m1 0h2m1 0h1m1 0h2m1 0h2m4 0h1M1 12.5h3m2 0h1m4 0h2m1 0h2m1 0h2m1 0h1m1 0h3M0 13.5h5m3 0h1m1 0h1m5 0h1m2 0h1m1 0h1m1 0h1M0 14.5h1m5 0h2m2 0h3m2 0h1m2 0h4m1 0h2M0 15.5h1m2 0h1m3 0h1m3 0h1m2 0h7m3 0h1M0 16.5h1m1 0h1m2 0h2m1 0h4m4 0h5m1 0h1M8 17.5h2m2 0h5m3 0h2M0 18.5h7m6 0h2m1 0h1m1 0h1m1 0h1m1 0h3M0 19.5h1m5 0h1m1 0h2m2 0h2m2 0h1m3 0h2m1 0h1M0 20.5h1m1 0h3m1 0h1m1 0h3m1 0h1m1 0h7m1 0h1m1 0h1M0 21.5h1m1 0h3m1 0h1m1 0h1m6 0h1m1 0h2m1 0h5M0 22.5h1m1 0h3m1 0h1m1 0h5m2 0h1m5 0h2m1 0h1M0 23.5h1m5 0h1m4 0h1m2 0h1m1 0h2m1 0h3m2 0h1M0 24.5h7m1 0h2m1 0h1m5 0h8"></path></svg> <div data-astro-cid-nzteqis6> <svg width="1em" height="1em" id="icon" data-astro-cid-nzteqis6 data-icon="mingcute:idcard-line"> <symbol id="ai:mingcute:idcard-line" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M4 4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 2h16v12H4zm6.25 3.75a1.75 1.75 0 1 1-3.5 0a1.75 1.75 0 0 1 3.5 0M5 14.5A2.5 2.5 0 0 1 7.5 12h2a2.5 2.5 0 0 1 2.5 2.5v.5a1 1 0 1 1-2 0v-.5a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 0-.5.5v.5a1 1 0 1 1-2 0zm8-3.5a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1m1 2a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2z"/></g></symbol><use href="#ai:mingcute:idcard-line"></use> </svg> <span aria-hidden="true" data-astro-cid-nzteqis6>example.com</span> </div> </a> "`;
exports[`Card > Valid URL > Default 1`] = `
"<button id="card" type="button" aria-label="Share your card" data-astro-cid-nzteqis6> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" shape-rendering="crispEdges" id="qr" data-astro-cid-nzteqis6><path stroke="#000000" d="M0 0.5h7m4 0h3m2 0h1m1 0h7M0 1.5h1m5 0h1m3 0h1m2 0h4m1 0h1m5 0h1M0 2.5h1m1 0h3m1 0h1m1 0h2m1 0h1m2 0h1m3 0h1m1 0h3m1 0h1M0 3.5h1m1 0h3m1 0h1m1 0h1m4 0h3m2 0h1m1 0h3m1 0h1M0 4.5h1m1 0h3m1 0h1m1 0h3m2 0h1m2 0h1m1 0h1m1 0h3m1 0h1M0 5.5h1m5 0h1m1 0h1m2 0h1m2 0h2m2 0h1m5 0h1M0 6.5h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7M8 7.5h1m5 0h1m1 0h1M0 8.5h1m1 0h5m5 0h1m5 0h5M1 9.5h1m2 0h2m2 0h1m1 0h2m1 0h1m3 0h1m1 0h1m3 0h1M0 10.5h5m1 0h1m1 0h2m3 0h4m2 0h1m1 0h1m1 0h2M0 11.5h2m1 0h3m2 0h1m1 0h2m1 0h1m1 0h2m1 0h2m4 0h1M1 12.5h3m2 0h1m4 0h2m1 0h2m1 0h2m1 0h1m1 0h3M0 13.5h5m3 0h1m1 0h1m5 0h1m2 0h1m1 0h1m1 0h1M0 14.5h1m5 0h2m2 0h3m2 0h1m2 0h4m1 0h2M0 15.5h1m2 0h1m3 0h1m3 0h1m2 0h7m3 0h1M0 16.5h1m1 0h1m2 0h2m1 0h4m4 0h5m1 0h1M8 17.5h2m2 0h5m3 0h2M0 18.5h7m6 0h2m1 0h1m1 0h1m1 0h1m1 0h3M0 19.5h1m5 0h1m1 0h2m2 0h2m2 0h1m3 0h2m1 0h1M0 20.5h1m1 0h3m1 0h1m1 0h3m1 0h1m1 0h7m1 0h1m1 0h1M0 21.5h1m1 0h3m1 0h1m1 0h1m6 0h1m1 0h2m1 0h5M0 22.5h1m1 0h3m1 0h1m1 0h5m2 0h1m5 0h2m1 0h1M0 23.5h1m5 0h1m4 0h1m2 0h1m1 0h2m1 0h3m2 0h1M0 24.5h7m1 0h2m1 0h1m5 0h8"></path></svg> <div data-astro-cid-nzteqis6> <svg width="1em" height="1em" class="icon" id="idcard" data-astro-cid-nzteqis6 data-icon="mingcute:idcard-line"> <symbol id="ai:mingcute:idcard-line" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M4 4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 2h16v12H4zm6.25 3.75a1.75 1.75 0 1 1-3.5 0a1.75 1.75 0 0 1 3.5 0M5 14.5A2.5 2.5 0 0 1 7.5 12h2a2.5 2.5 0 0 1 2.5 2.5v.5a1 1 0 1 1-2 0v-.5a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 0-.5.5v.5a1 1 0 1 1-2 0zm8-3.5a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1m1 2a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2z"/></g></symbol><use href="#ai:mingcute:idcard-line"></use> </svg> <svg width="1em" height="1em" class="icon" id="check" display="none" data-astro-cid-nzteqis6 data-icon="mingcute:checkbox-line"> <symbol id="ai:mingcute:checkbox-line" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.594 23.258l-.012.002l-.071.035l-.02.004l-.014-.004l-.071-.036q-.016-.004-.024.006l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.016-.018m.264-.113l-.014.002l-.184.093l-.01.01l-.003.011l.018.43l.005.012l.008.008l.201.092q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.003-.011l.018-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M5 3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm0 2h14v14H5zm11.95 4.795a1 1 0 1 0-1.414-1.414l-4.95 4.95l-2.121-2.121a1 1 0 0 0-1.415 1.414l2.758 2.758a1.1 1.1 0 0 0 1.556 0z"/></g></symbol><use href="#ai:mingcute:checkbox-line"></use> </svg> <span aria-hidden="true" data-astro-cid-nzteqis6>example.com</span> </div> </button> <script>
const shareData = {
title: document.title,
text: document.head.querySelector('[name="description"]').content,
url: location.href,
};
exports[`Card > Valid URL > SubDomain 1`] = `"<a href="https://www.example.com" target="_blank" rel="noopener noreferrer" aria-label="Visit www.example.com" data-astro-cid-nzteqis6> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" shape-rendering="crispEdges" id="qr" data-astro-cid-nzteqis6><path stroke="#000000" d="M0 0.5h7m5 0h2m2 0h1m1 0h7M0 1.5h1m5 0h1m2 0h3m2 0h2m2 0h1m5 0h1M0 2.5h1m1 0h3m1 0h1m1 0h1m1 0h3m2 0h1m2 0h1m1 0h3m1 0h1M0 3.5h1m1 0h3m1 0h1m1 0h2m1 0h1m1 0h4m1 0h1m1 0h3m1 0h1M0 4.5h1m1 0h3m1 0h1m1 0h1m2 0h2m3 0h1m1 0h1m1 0h3m1 0h1M0 5.5h1m5 0h1m1 0h1m2 0h2m1 0h3m1 0h1m5 0h1M0 6.5h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7M8 7.5h1m2 0h1m2 0h3M0 8.5h1m1 0h5m3 0h1m1 0h2m4 0h5M0 9.5h3m4 0h5m1 0h1m2 0h2m1 0h1m3 0h1M0 10.5h1m1 0h2m2 0h1m1 0h2m1 0h11m1 0h2M0 11.5h2m1 0h2m3 0h1m2 0h1m3 0h1m1 0h1m1 0h1m4 0h1M2 12.5h1m3 0h1m3 0h1m1 0h4m1 0h4m1 0h3M0 13.5h2m3 0h1m4 0h1m5 0h2m1 0h1m1 0h1m1 0h1M0 14.5h1m2 0h1m1 0h2m3 0h4m1 0h1m1 0h5m1 0h2M0 15.5h1m2 0h2m4 0h1m1 0h1m2 0h2m1 0h1m1 0h2m3 0h1M0 16.5h1m4 0h4m1 0h2m1 0h2m1 0h5m1 0h1M8 17.5h1m3 0h2m2 0h1m3 0h2M0 18.5h7m3 0h1m2 0h2m1 0h1m1 0h1m1 0h1m1 0h3M0 19.5h1m5 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m3 0h2m1 0h1M0 20.5h1m1 0h3m1 0h1m1 0h1m3 0h9m1 0h3M0 21.5h1m1 0h3m1 0h1m1 0h3m2 0h1m4 0h1m1 0h5M0 22.5h1m1 0h3m1 0h1m1 0h2m1 0h2m1 0h1m6 0h2m1 0h1M0 23.5h1m5 0h1m2 0h1m1 0h1m2 0h4m1 0h3m2 0h1M0 24.5h7m1 0h2m1 0h2m6 0h6"></path></svg> <div data-astro-cid-nzteqis6> <svg width="1em" height="1em" id="icon" data-astro-cid-nzteqis6 data-icon="mingcute:idcard-line"> <symbol id="ai:mingcute:idcard-line" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M4 4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 2h16v12H4zm6.25 3.75a1.75 1.75 0 1 1-3.5 0a1.75 1.75 0 0 1 3.5 0M5 14.5A2.5 2.5 0 0 1 7.5 12h2a2.5 2.5 0 0 1 2.5 2.5v.5a1 1 0 1 1-2 0v-.5a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 0-.5.5v.5a1 1 0 1 1-2 0zm8-3.5a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1m1 2a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2z"/></g></symbol><use href="#ai:mingcute:idcard-line"></use> </svg> <span aria-hidden="true" data-astro-cid-nzteqis6>www.example.com</span> </div> </a> "`;
document.getElementById("card").addEventListener("click", async () => {
if (
/iPhone|iPad|Android/i.test(navigator.userAgent) &&
navigator.canShare(shareData)
) {
try {
await navigator.share(shareData);
} catch (error) {
if (error.name !== "AbortError") console.error("Error sharing:", error);
}
} else {
await navigator.clipboard.writeText(shareData.url);
const [cardIcon, checkIcon] = [
document.getElementById("idcard"),
document.getElementById("check"),
];
[cardIcon.style.display, checkIcon.style.display] = ["none", "block"];
setTimeout(() => {
[cardIcon.style.display, checkIcon.style.display] = ["block", "none"];
}, 1000);
}
});
</script>"
`;
exports[`Card > Valid URL > SubDomain 1`] = `
"<button id="card" type="button" aria-label="Share your card" data-astro-cid-nzteqis6> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" shape-rendering="crispEdges" id="qr" data-astro-cid-nzteqis6><path stroke="#000000" d="M0 0.5h7m5 0h2m2 0h1m1 0h7M0 1.5h1m5 0h1m2 0h3m2 0h2m2 0h1m5 0h1M0 2.5h1m1 0h3m1 0h1m1 0h1m1 0h3m2 0h1m2 0h1m1 0h3m1 0h1M0 3.5h1m1 0h3m1 0h1m1 0h2m1 0h1m1 0h4m1 0h1m1 0h3m1 0h1M0 4.5h1m1 0h3m1 0h1m1 0h1m2 0h2m3 0h1m1 0h1m1 0h3m1 0h1M0 5.5h1m5 0h1m1 0h1m2 0h2m1 0h3m1 0h1m5 0h1M0 6.5h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7M8 7.5h1m2 0h1m2 0h3M0 8.5h1m1 0h5m3 0h1m1 0h2m4 0h5M0 9.5h3m4 0h5m1 0h1m2 0h2m1 0h1m3 0h1M0 10.5h1m1 0h2m2 0h1m1 0h2m1 0h11m1 0h2M0 11.5h2m1 0h2m3 0h1m2 0h1m3 0h1m1 0h1m1 0h1m4 0h1M2 12.5h1m3 0h1m3 0h1m1 0h4m1 0h4m1 0h3M0 13.5h2m3 0h1m4 0h1m5 0h2m1 0h1m1 0h1m1 0h1M0 14.5h1m2 0h1m1 0h2m3 0h4m1 0h1m1 0h5m1 0h2M0 15.5h1m2 0h2m4 0h1m1 0h1m2 0h2m1 0h1m1 0h2m3 0h1M0 16.5h1m4 0h4m1 0h2m1 0h2m1 0h5m1 0h1M8 17.5h1m3 0h2m2 0h1m3 0h2M0 18.5h7m3 0h1m2 0h2m1 0h1m1 0h1m1 0h1m1 0h3M0 19.5h1m5 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m3 0h2m1 0h1M0 20.5h1m1 0h3m1 0h1m1 0h1m3 0h9m1 0h3M0 21.5h1m1 0h3m1 0h1m1 0h3m2 0h1m4 0h1m1 0h5M0 22.5h1m1 0h3m1 0h1m1 0h2m1 0h2m1 0h1m6 0h2m1 0h1M0 23.5h1m5 0h1m2 0h1m1 0h1m2 0h4m1 0h3m2 0h1M0 24.5h7m1 0h2m1 0h2m6 0h6"></path></svg> <div data-astro-cid-nzteqis6> <svg width="1em" height="1em" class="icon" id="idcard" data-astro-cid-nzteqis6 data-icon="mingcute:idcard-line"> <symbol id="ai:mingcute:idcard-line" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M4 4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 2h16v12H4zm6.25 3.75a1.75 1.75 0 1 1-3.5 0a1.75 1.75 0 0 1 3.5 0M5 14.5A2.5 2.5 0 0 1 7.5 12h2a2.5 2.5 0 0 1 2.5 2.5v.5a1 1 0 1 1-2 0v-.5a.5.5 0 0 0-.5-.5h-2a.5.5 0 0 0-.5.5v.5a1 1 0 1 1-2 0zm8-3.5a1 1 0 0 1 1-1h2a1 1 0 1 1 0 2h-2a1 1 0 0 1-1-1m1 2a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2z"/></g></symbol><use href="#ai:mingcute:idcard-line"></use> </svg> <svg width="1em" height="1em" class="icon" id="check" display="none" data-astro-cid-nzteqis6 data-icon="mingcute:checkbox-line"> <symbol id="ai:mingcute:checkbox-line" viewBox="0 0 24 24"><g fill="none" fill-rule="evenodd"><path d="m12.594 23.258l-.012.002l-.071.035l-.02.004l-.014-.004l-.071-.036q-.016-.004-.024.006l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.016-.018m.264-.113l-.014.002l-.184.093l-.01.01l-.003.011l.018.43l.005.012l.008.008l.201.092q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.003-.011l.018-.43l-.003-.012l-.01-.01z"/><path fill="currentColor" d="M5 3a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2zm0 2h14v14H5zm11.95 4.795a1 1 0 1 0-1.414-1.414l-4.95 4.95l-2.121-2.121a1 1 0 0 0-1.415 1.414l2.758 2.758a1.1 1.1 0 0 0 1.556 0z"/></g></symbol><use href="#ai:mingcute:checkbox-line"></use> </svg> <span aria-hidden="true" data-astro-cid-nzteqis6>www.example.com</span> </div> </button> <script>
const shareData = {
title: document.title,
text: document.head.querySelector('[name="description"]').content,
url: location.href,
};
document.getElementById("card").addEventListener("click", async () => {
if (
/iPhone|iPad|Android/i.test(navigator.userAgent) &&
navigator.canShare(shareData)
) {
try {
await navigator.share(shareData);
} catch (error) {
if (error.name !== "AbortError") console.error("Error sharing:", error);
}
} else {
await navigator.clipboard.writeText(shareData.url);
const [cardIcon, checkIcon] = [
document.getElementById("idcard"),
document.getElementById("check"),
];
[cardIcon.style.display, checkIcon.style.display] = ["none", "block"];
setTimeout(() => {
[cardIcon.style.display, checkIcon.style.display] = ["block", "none"];
}, 1000);
}
});
</script>"
`;
Loading

0 comments on commit 5d914a2

Please sign in to comment.