mirror of
https://github.com/aljazceru/njump.git
synced 2025-12-17 06:14:22 +01:00
157 lines
5.9 KiB
Plaintext
157 lines
5.9 KiB
Plaintext
package main
|
|
|
|
import "fmt"
|
|
|
|
templ profileTemplate(params ProfilePageParams) {
|
|
<!DOCTYPE html>
|
|
<html class="theme--default text-lg font-light print:text-base sm:text-xl">
|
|
<meta charset="UTF-8"/>
|
|
<head>
|
|
<title>{ params.Metadata.Name } / { params.Metadata.DisplayName } is on Nostr</title>
|
|
<meta
|
|
name="description"
|
|
content={ fmt.Sprintf("%s is %s's public key on Nostr", params.Npub, params.Metadata.ShortName()) }
|
|
/>
|
|
<meta property="og:title" content={ params.Title }/>
|
|
<meta property="og:site_name" content={ params.Npub }/>
|
|
if params.Metadata.Picture != "" {
|
|
<meta property="og:image" content={ params.Metadata.Picture }/>
|
|
<meta property="twitter:image" content={ params.Proxy + params.Metadata.Picture }/>
|
|
}
|
|
if params.Metadata.About != "" {
|
|
<meta property="og:description" content={ params.Metadata.About }/>
|
|
}
|
|
<meta name="twitter:card" content="summary"/>
|
|
<link rel="canonical" href={ "https://njump.me/" + params.Npub }/>
|
|
<link
|
|
rel="sitemap"
|
|
type="application/xml"
|
|
title={ "Sitemap for " + params.Npub }
|
|
href={ "/" + params.Npub + ".xml" }
|
|
/>
|
|
<link
|
|
rel="alternate"
|
|
type="application/atom+xml"
|
|
title="RSS"
|
|
href={ "/" + params.Npub + ".rss" }
|
|
/>
|
|
@headCommonTemplate(params.HeadParams)
|
|
</head>
|
|
<body class="mb-16 bg-white text-gray-600 print:text-black dark:bg-neutral-900 dark:text-neutral-50">
|
|
@topTemplate()
|
|
<div class="mx-auto px-4 sm:flex sm:items-center sm:justify-center sm:px-0">
|
|
<div class="w-full max-w-screen-2xl justify-between gap-10 overflow-visible print:w-full sm:flex sm:w-11/12 sm:px-4 md:w-10/12 lg:w-9/12 lg:gap-48vw">
|
|
<header
|
|
class="relative top-auto flex basis-1/4 items-center self-start sm:sticky sm:top-8 sm:mt-8 sm:block sm:items-start"
|
|
>
|
|
<div
|
|
class="hidden basis-[64%] items-center overflow-hidden text-left"
|
|
_="on load or scroll from window or resize from window get #profile_name then measure its top, height then if top is less than height / -2 or height is 0 remove .hidden otherwise add .hidden"
|
|
>
|
|
<div class="mb-3 sm:text-center">
|
|
<div class="text-2xl">{ params.Metadata.Name }</div>
|
|
if params.Metadata.Name != params.Metadata.DisplayName {
|
|
<div class="text-base text-stone-400">
|
|
{ params.Metadata.DisplayName }
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="imgclip max-w-[40%] basis-2/5 overflow-hidden sm:max-w-full sm:basis-auto"
|
|
>
|
|
<img class="block h-auto w-full" src={ params.Metadata.Picture }/>
|
|
</div>
|
|
</header>
|
|
<div class="w-full break-words print:w-full sm:w-1/2">
|
|
<header class="mb-6 hidden leading-5 sm:flex sm:items-center">
|
|
<h1>
|
|
<div id="profile_name" class="text-2xl">{ params.Metadata.Name }</div>
|
|
if params.Metadata.Name != params.Metadata.DisplayName {
|
|
<div class="text-xl text-stone-400">
|
|
{ params.Metadata.DisplayName }
|
|
</div>
|
|
}
|
|
</h1>
|
|
</header>
|
|
<div class="-ml-4 mb-6 h-1.5 w-1/2 bg-zinc-100 sm:-ml-2.5 dark:bg-zinc-700"></div>
|
|
if params.Metadata.Website != "" {
|
|
<div class="mb-6 leading-5">
|
|
<a
|
|
class="border-b-2 border-b-gray-300 pb-0.5 hover:text-strongpink"
|
|
href={ templ.URL(params.NormalizedAuthorWebsiteURL) }
|
|
>{ params.Metadata.Website }</a>
|
|
</div>
|
|
}
|
|
if params.RenderedAuthorAboutText != "" {
|
|
<div
|
|
class="prose mb-6 leading-5 dark:prose-invert prose-headings:font-light sm:prose-a:text-justify"
|
|
dir="auto"
|
|
>
|
|
@templ.Raw(params.RenderedAuthorAboutText)
|
|
</div>
|
|
}
|
|
if params.Metadata.Website != "" || params.RenderedAuthorAboutText != "" {
|
|
<div class="-ml-4 mb-6 h-1.5 w-1/3 bg-zinc-100 sm:-ml-2.5 dark:bg-zinc-700"></div>
|
|
}
|
|
<div class="mb-6 leading-5">
|
|
<div class="text-sm text-strongpink">Public Key</div>
|
|
{ params.Npub }
|
|
</div>
|
|
<div class="mb-6 leading-5">
|
|
if params.Metadata.NIP05 != "" {
|
|
<div class="text-sm text-strongpink">NIP-05 Address</div>
|
|
{ params.Metadata.NIP05 }
|
|
}
|
|
</div>
|
|
<div class="mb-6 leading-5">
|
|
if params.Metadata.LUD16 != "" {
|
|
<div class="text-sm text-strongpink">NIP-57 Address</div>
|
|
{ params.Metadata.LUD16 }
|
|
}
|
|
</div>
|
|
<div class="mb-6 leading-5">
|
|
<div class="text-sm text-strongpink">Profile Code</div>
|
|
{ params.Nprofile }
|
|
</div>
|
|
if len(params.AuthorRelays) != 0 {
|
|
<div class="mb-6 leading-5">
|
|
<div class="text-sm text-strongpink">Publishing to</div>
|
|
for _, relay := range params.AuthorRelays {
|
|
<a
|
|
href={ templ.URL("/r/" + relay) }
|
|
class="mr-1 mt-2 inline-block max-w-full rounded-lg border border-slate-300 px-2 py-0.5 hover:border hover:border-solid hover:border-strongpink hover:bg-strongpink hover:text-white"
|
|
>
|
|
{ relay }
|
|
</a>
|
|
}
|
|
</div>
|
|
}
|
|
@detailsTemplate(params.DetailsParams)
|
|
<div
|
|
_={ "init fetch /profile-last-notes/" + params.Npub + " then put the result into me end" }
|
|
>
|
|
if len(params.LastNotes) != 0 {
|
|
<aside>
|
|
<div class="-ml-4 mb-6 h-1.5 w-1/3 bg-zinc-100 sm:-ml-2.5 dark:bg-zinc-700"></div>
|
|
<nav class="mb-6 leading-5">
|
|
<h2 class="text-2xl text-strongpink">Last Notes</h2>
|
|
for _, ee := range params.LastNotes {
|
|
<a class="my-8 block no-underline hover:-ml-6 hover:border-l-05rem hover:border-solid hover:border-l-gray-100 hover:pl-4 dark:hover:border-l-zinc-700" href={ templ.URL("/" + ee.Nevent()) }>
|
|
{ ee.Nevent() }
|
|
</a>
|
|
}
|
|
</nav>
|
|
</aside>
|
|
}
|
|
</div>
|
|
<div class="-ml-4 mb-6 h-1.5 w-1/3 bg-zinc-100 sm:-ml-2.5 dark:bg-zinc-700"></div>
|
|
</div>
|
|
@clientsTemplate(params.Clients)
|
|
</div>
|
|
</div>
|
|
@footerTemplate()
|
|
</body>
|
|
</html>
|
|
}
|