From 63c74cb9a42ea0a9483c93ddb24602ee167b0bf0 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Thu, 25 Apr 2024 17:34:45 +0100 Subject: [PATCH] feat: add profile page and link to it whenever the UserHeader is displayed. closes issue: nostr:nevent1qqsyxwvgdaacc3hcd9rjwmjwqsfpu8guhrj37026ntl3aqw02mrprsgpzemhxue69uhhyetvv9ujumn0wd68ytnzv9hxgq3ql5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqseukj7u and partially fulfills issue: nostr:nevent1qqsyxwvgdaacc3hcd9rjwmjwqsfpu8guhrj37026ntl3aqw02mrprsgpzemhxue69uhhyetvv9ujumn0wd68ytnzv9hxgq3ql5sga6xg72phsz5422ykujprejwud075ggrr3z2hwyrfgr7eylqseukj7u --- src/lib/components/CopyField.svelte | 45 +++++++++--- src/lib/components/icons.ts | 14 ++++ src/lib/components/repo/RepoDetails.svelte | 34 +-------- src/lib/components/users/UserHeader.svelte | 80 ++++++++++++++++++++-- src/routes/p/[npub]/+page.svelte | 66 ++++++++++++++++++ src/routes/p/[npub]/+page.ts | 7 ++ 6 files changed, 202 insertions(+), 44 deletions(-) create mode 100644 src/routes/p/[npub]/+page.svelte create mode 100644 src/routes/p/[npub]/+page.ts diff --git a/src/lib/components/CopyField.svelte b/src/lib/components/CopyField.svelte index efb4f94..ded5b6e 100644 --- a/src/lib/components/CopyField.svelte +++ b/src/lib/components/CopyField.svelte @@ -4,13 +4,23 @@ export let label: string = '' export let content: string = '' export let border_color = 'primary' + export let no_border = false + export let icon: undefined | string[] = undefined + export let truncate: undefined | [number, number] = undefined + const truncatedContent = () => { + if (truncate && content.length > truncate[0] + truncate[1] + 3) { + return `${content.substring(0, truncate[0])}...${content.substring(content.length - 1 - truncate[1])}` + } + return content + } let copied = false
{ try { await navigator.clipboard.writeText(content) @@ -21,16 +31,35 @@ } catch {} }} > - {label} - {#if copied} - (copied to clipboard){/if} + {#if label.length > 0} + {label} + {#if copied} + (copied to clipboard){/if} + {/if}
-
- {content} + {#if icon} + {#each icon as d} + + {/each} + {/if} +
+ {truncatedContent()}
{/if} {#each maintainers as maintainer} - - -
{ - try { - await navigator.clipboard.writeText( - new NDKUser({ hexpubkey: maintainer }).npub - ) - maintainer_copied = maintainer - setTimeout(() => { - maintainer_copied = false - }, 2000) - } catch {} - }} - class="group my-2 mt-3 flex cursor-pointer items-center break-words text-xs" - class:text-success={maintainer_copied === maintainer} - class:opacity-50={maintainer_copied === maintainer} - > -
-
- - {#each icons_misc.copy as d} - - {/each} - -
+
+
{/each} {/if} diff --git a/src/lib/components/users/UserHeader.svelte b/src/lib/components/users/UserHeader.svelte index eb8b9e4..4668673 100644 --- a/src/lib/components/users/UserHeader.svelte +++ b/src/lib/components/users/UserHeader.svelte @@ -3,15 +3,20 @@ import type { Unsubscriber } from 'svelte/store' import { defaults, getName, type User, type UserObject } from './type' import { onDestroy } from 'svelte' + import { goto } from '$app/navigation' + import ParsedContent from '../events/content/ParsedContent.svelte' + import CopyField from '../CopyField.svelte' + import { icons_misc } from '../icons' export let user: User = { ...defaults, } export let inline = false - export let size: 'xs' | 'sm' | 'md' = 'md' + export let size: 'xs' | 'sm' | 'md' | 'full' = 'md' export let avatar_only = false export let in_event_header = false + export let link_to_profile = true let user_object: UserObject = { ...defaults, @@ -32,7 +37,14 @@ $: display_name = getName(user_object) -
+ +
{ + if (link_to_profile) goto(`/p/${user_object.npub}`) + }} +>
{#if loading} @@ -86,7 +102,63 @@ class:h-2.5={size === 'xs'} >
{:else} - {display_name} + {display_name} + {/if} + {#if size === 'full'} + + {#if profile && profile.lud16} + + {/if} + {#if profile && profile.website} + + + {#each icons_misc.link as d} + + {/each} + + + + {/if} + {#if size === 'full' && profile && profile.about} +
+ + {#each icons_misc.info as d} + + {/each} + + + {#if loading} +
+ {:else} +
+ +
+ {/if} +
+ {/if} {/if}
diff --git a/src/routes/p/[npub]/+page.svelte b/src/routes/p/[npub]/+page.svelte new file mode 100644 index 0000000..bd01d14 --- /dev/null +++ b/src/routes/p/[npub]/+page.svelte @@ -0,0 +1,66 @@ + + +{#if error} + + + +{:else if pubkey} + +
+ +
+ pubkey && summary.maintainers.includes(pubkey) + )} + loading={$recent_repo_summaries_loading} + /> +
+
+{/if} diff --git a/src/routes/p/[npub]/+page.ts b/src/routes/p/[npub]/+page.ts new file mode 100644 index 0000000..7cb704b --- /dev/null +++ b/src/routes/p/[npub]/+page.ts @@ -0,0 +1,7 @@ +export const load = ({ params }: { params: { npub: string } }) => { + return { + npub: params.npub, + } +} + +export const ssr = false