You've already forked AstralRinth
forked from didirus/AstralRinth
* feat: blog migration w/ fixes Co-authored-by: Prospector <prospectordev@gmail.com> * feat: add changelog button to news page * fix: lint issues * refactor: replace nuxt content with `@modrinth/blog` * feat: shared public folder * feat: try lazy loading html content * feat: rss + hide newsletter btn + blog.config.ts * feat: add new chapter modrinth servers post * fix: lint issues * fix: only generate RSS feed if changes detected * fix: utils dep * fix: lockfile dep * feat: GET /email/subscribe + subscription button * fix: lint issues * feat: articles.json for app * Made grid more responsive * fix: changes * Make margin slightly smaller in lists * Fix footer link * feat: latest news * Fix responsiveness * Remove old utm link * Update changelog * Lint --------- Co-authored-by: Prospector <prospectordev@gmail.com>
87 lines
2.2 KiB
Vue
87 lines
2.2 KiB
Vue
<template>
|
|
<div class="flex gap-2">
|
|
<ButtonStyled circular>
|
|
<a
|
|
v-tooltip="`Share on Bluesky`"
|
|
:href="`https://bsky.app/intent/compose?text=${encodedUrl}`"
|
|
target="_blank"
|
|
>
|
|
<BlueskyIcon />
|
|
</a>
|
|
</ButtonStyled>
|
|
<ButtonStyled circular>
|
|
<a
|
|
v-tooltip="`Share on Mastodon`"
|
|
:href="`https://tootpick.org/#text=${encodedUrl}`"
|
|
target="_blank"
|
|
>
|
|
<MastodonIcon />
|
|
</a>
|
|
</ButtonStyled>
|
|
<ButtonStyled circular>
|
|
<a
|
|
v-tooltip="`Share on X`"
|
|
:href="`https://www.x.com/intent/post?url=${encodedUrl}`"
|
|
target="_blank"
|
|
>
|
|
<TwitterIcon />
|
|
</a>
|
|
</ButtonStyled>
|
|
<ButtonStyled circular>
|
|
<a
|
|
v-tooltip="`Share via email`"
|
|
:href="`mailto:${encodedTitle ? `?subject=${encodedTitle}&` : `?`}body=${encodedUrl}`"
|
|
target="_blank"
|
|
>
|
|
<MailIcon />
|
|
</a>
|
|
</ButtonStyled>
|
|
<ButtonStyled circular>
|
|
<button
|
|
v-tooltip="copied ? `Copied to clipboard` : `Copy link`"
|
|
:disabled="copied"
|
|
class="relative grid place-items-center overflow-hidden"
|
|
@click="copyToClipboard(url)"
|
|
>
|
|
<CheckIcon
|
|
class="absolute transition-all ease-in-out"
|
|
:class="copied ? 'translate-y-0' : 'translate-y-7'"
|
|
/>
|
|
<LinkIcon
|
|
class="absolute transition-all ease-in-out"
|
|
:class="copied ? '-translate-y-7' : 'translate-y-0'"
|
|
/>
|
|
</button>
|
|
</ButtonStyled>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import {
|
|
BlueskyIcon,
|
|
CheckIcon,
|
|
LinkIcon,
|
|
MailIcon,
|
|
MastodonIcon,
|
|
TwitterIcon,
|
|
} from "@modrinth/assets";
|
|
import { ButtonStyled } from "@modrinth/ui";
|
|
|
|
const props = defineProps<{
|
|
title?: string;
|
|
url: string;
|
|
}>();
|
|
|
|
const copied = ref(false);
|
|
const encodedUrl = computed(() => encodeURIComponent(props.url));
|
|
const encodedTitle = computed(() => (props.title ? encodeURIComponent(props.title) : undefined));
|
|
|
|
async function copyToClipboard(text: string) {
|
|
await navigator.clipboard.writeText(text);
|
|
copied.value = true;
|
|
setTimeout(() => {
|
|
copied.value = false;
|
|
}, 3000);
|
|
}
|
|
</script>
|