You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.4 KiB
74 lines
2.4 KiB
<script module lang="ts"> |
|
import { goto } from "$app/navigation"; |
|
import { |
|
createProfileLinkWithVerification, |
|
toNpub, |
|
getUserMetadata, |
|
} from "$lib/utils/nostrUtils"; |
|
import type { UserProfile } from "$lib/models/user_profile"; |
|
|
|
export { userBadge }; |
|
</script> |
|
|
|
{#snippet userBadge(identifier: string, displayText: string | undefined)} |
|
{@const npub = toNpub(identifier)} |
|
{#if npub} |
|
{#if !displayText || displayText.trim().toLowerCase() === "unknown"} |
|
{#await getUserMetadata(npub, undefined, false) then profile} |
|
{@const p = profile as UserProfile} |
|
<span class="inline-flex items-center gap-0.5"> |
|
<button |
|
class="npub-badge bg-transparent border-none p-0 underline cursor-pointer" |
|
onclick={() => goto(`/events?id=${npub}`)} |
|
> |
|
@{p.display_name || |
|
p.display_name || |
|
p.name || |
|
npub.slice(0, 8) + "..." + npub.slice(-4)} |
|
</button> |
|
</span> |
|
{:catch} |
|
<span class="inline-flex items-center gap-0.5"> |
|
<button |
|
class="npub-badge bg-transparent border-none p-0 underline cursor-pointer" |
|
onclick={() => goto(`/events?id=${npub}`)} |
|
> |
|
@{npub.slice(0, 8) + "..." + npub.slice(-4)} |
|
</button> |
|
</span> |
|
{/await} |
|
{:else} |
|
{#await createProfileLinkWithVerification(npub as string, displayText, undefined)} |
|
<span class="inline-flex items-center gap-0.5"> |
|
<button |
|
class="npub-badge bg-transparent border-none p-0 underline cursor-pointer" |
|
onclick={() => goto(`/events?id=${npub}`)} |
|
> |
|
@{displayText} |
|
</button> |
|
</span> |
|
{:then html} |
|
<span class="inline-flex items-center gap-0.5"> |
|
<button |
|
class="npub-badge bg-transparent border-none p-0 underline cursor-pointer" |
|
onclick={() => goto(`/events?id=${npub}`)} |
|
> |
|
@{displayText} |
|
</button> |
|
{@html html.replace(/([\s\S]*<\/a>)/, "").trim()} |
|
</span> |
|
{:catch} |
|
<span class="inline-flex items-center gap-0.5"> |
|
<button |
|
class="npub-badge bg-transparent border-none p-0 underline cursor-pointer" |
|
onclick={() => goto(`/events?id=${npub}`)} |
|
> |
|
@{displayText} |
|
</button> |
|
</span> |
|
{/await} |
|
{/if} |
|
{:else} |
|
{displayText ?? ""} |
|
{/if} |
|
{/snippet}
|
|
|