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.
239 lines
6.9 KiB
239 lines
6.9 KiB
<script lang="ts"> |
|
import UserHeader from '$lib/components/users/UserHeader.svelte' |
|
import { icons_misc } from '../icons' |
|
import { event_defaults } from './type' |
|
|
|
export let { |
|
event_id, |
|
naddr, |
|
identifier, |
|
unique_commit, |
|
name, |
|
description, |
|
clone, |
|
web, |
|
tags, |
|
maintainers, |
|
relays, |
|
referenced_by, |
|
created_at, |
|
loading, |
|
} = event_defaults |
|
$: short_descrption = |
|
!description && description.length > 500 |
|
? description.slice(0, 450) + '...' |
|
: description |
|
let naddr_copied = false |
|
let git_url_copied: false | string = false |
|
</script> |
|
|
|
<div class="prose w-full max-w-md"> |
|
{#if name == identifier} |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="skeleton my-2 h-4"></div> |
|
<div class="skeleton my-2 mb-3 h-4 w-2/3"></div> |
|
{:else if !name || name.length == 0} |
|
<h4>name / identifier</h4> |
|
<div>none</div> |
|
{:else} |
|
<h4>name / identifier</h4> |
|
<p class="my-2 break-words text-sm">{name}</p> |
|
{/if} |
|
{:else} |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="skeleton my-2 h-4"></div> |
|
<div class="skeleton my-2 mb-3 h-4 w-2/3"></div> |
|
{:else if !name || name.length == 0} |
|
<h4>name</h4> |
|
<div>none</div> |
|
{:else} |
|
<h4>name</h4> |
|
<p class="my-2 break-words text-sm">{name}</p> |
|
{/if} |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="skeleton my-2 h-4"></div> |
|
<div class="skeleton my-2 mb-3 h-4 w-2/3"></div> |
|
{:else if !identifier || identifier.length == 0} |
|
<h4>identifier</h4> |
|
<div>none</div> |
|
{:else} |
|
<h4>identifier</h4> |
|
<p class="my-2 break-words text-sm">{identifier}</p> |
|
{/if} |
|
{/if} |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="skeleton my-2 h-4"></div> |
|
<div class="skeleton my-2 mb-3 h-4 w-2/3"></div> |
|
{:else if !short_descrption || description.length == 0} |
|
<h4>description</h4> |
|
<div>none</div> |
|
{:else} |
|
<h4>description</h4> |
|
<p class="my-2 break-words text-sm">{short_descrption}</p> |
|
{/if} |
|
<div> |
|
{#if loading} |
|
<div class="badge skeleton w-20"></div> |
|
<div class="badge skeleton w-20"></div> |
|
{:else} |
|
{#each tags as tag} |
|
<div class="badge badge-secondary mr-2">{tag}</div> |
|
{/each} |
|
{/if} |
|
</div> |
|
<div> |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="badge skeleton my-2 block w-60"></div> |
|
{:else if clone.length == 0} |
|
<div /> |
|
{:else} |
|
<h4> |
|
clone {#if git_url_copied}<span class="text-sm text-success opacity-50"> |
|
(copied to clipboard)</span |
|
>{/if} |
|
</h4> |
|
{#each clone as git_url} |
|
<!-- eslint-disable-next-line svelte/valid-compile --> |
|
<!-- svelte-ignore a11y-click-events-have-key-events --> |
|
<div |
|
on:click={async () => { |
|
try { |
|
await navigator.clipboard.writeText(git_url) |
|
git_url_copied = git_url |
|
setTimeout(() => { |
|
git_url_copied = false |
|
}, 2000) |
|
} catch {} |
|
}} |
|
class="group my-2 mt-3 cursor-pointer break-words text-xs" |
|
class:text-success={git_url_copied === git_url} |
|
class:opacity-50={git_url_copied === git_url} |
|
> |
|
{git_url} |
|
<svg |
|
xmlns="http://www.w3.org/2000/svg" |
|
viewBox="0 0 16 16" |
|
class="ml-1 inline h-4 w-4 flex-none fill-base-content opacity-50" |
|
class:group-hover:opacity-100={git_url_copied !== git_url} |
|
class:fill-base-content={git_url_copied !== git_url} |
|
class:fill-success={git_url_copied === git_url} |
|
class:opacity-100={git_url_copied === git_url} |
|
> |
|
{#each icons_misc.copy as d} |
|
<path {d} /> |
|
{/each} |
|
</svg> |
|
</div> |
|
{/each} |
|
{/if} |
|
</div> |
|
<div> |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="badge skeleton my-2 block w-60"></div> |
|
<div class="badge skeleton my-2 block w-40"></div> |
|
{:else if web.length == 0} |
|
<h4>websites</h4> |
|
<div>none</div> |
|
{:else} |
|
<h4>websites</h4> |
|
{#each web as site} |
|
<a |
|
href={site} |
|
target="_blank" |
|
class="link link-primary my-2 break-words text-sm" |
|
> |
|
{site} |
|
</a> |
|
{/each} |
|
{/if} |
|
</div> |
|
|
|
<div> |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="badge skeleton my-2 block w-60"></div> |
|
<div class="badge skeleton my-2 block w-40"></div> |
|
{:else if maintainers.length == 0} |
|
<div /> |
|
{:else} |
|
<h4>maintainers</h4> |
|
{#each maintainers as maintainer} |
|
<UserHeader user={maintainer} /> |
|
{/each} |
|
{/if} |
|
</div> |
|
<div> |
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="badge skeleton my-2 block w-60"></div> |
|
<div class="badge skeleton my-2 block w-40"></div> |
|
{:else if relays.length == 0} |
|
<h4>relays</h4> |
|
<div>none</div> |
|
{:else} |
|
<h4>relays</h4> |
|
{#each relays as relay} |
|
<div class="badge badge-secondary badge-sm my-2 block">{relay}</div> |
|
{/each} |
|
{/if} |
|
</div> |
|
|
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="skeleton my-2 h-4"></div> |
|
<div class="skeleton my-2 mb-3 h-4 w-2/3"></div> |
|
{:else if !unique_commit || unique_commit.length == 0} |
|
<h4>earliest unique commit</h4> |
|
<p class="my-2 break-words text-xs">not specified</p> |
|
{:else} |
|
<h4>earliest unique commit</h4> |
|
<p class="my-2 break-words text-xs">{unique_commit}</p> |
|
{/if} |
|
|
|
{#if loading} |
|
<div class="skeleton my-3 h-5 w-20"></div> |
|
<div class="skeleton my-2 h-4"></div> |
|
<div class="skeleton my-2 mb-3 h-4 w-2/3"></div> |
|
{:else if naddr && naddr.length > 0} |
|
<!-- eslint-disable-next-line svelte/valid-compile --> |
|
<!-- svelte-ignore a11y-click-events-have-key-events --> |
|
<div |
|
on:click={async () => { |
|
try { |
|
await navigator.clipboard.writeText(naddr) |
|
naddr_copied = true |
|
setTimeout(() => { |
|
naddr_copied = false |
|
}, 2000) |
|
} catch {} |
|
}} |
|
class="group -m-3 mt-3 cursor-pointer rounded-md p-3 hover:bg-base-300" |
|
> |
|
<h4 class="mt-0 pt-0"> |
|
naddr |
|
<svg |
|
xmlns="http://www.w3.org/2000/svg" |
|
viewBox="0 0 16 16" |
|
class="ml-1 inline h-4 w-4 flex-none fill-base-content opacity-50 group-hover:opacity-100" |
|
class:fill-base-content={!naddr_copied} |
|
class:fill-success={naddr_copied} |
|
> |
|
{#each icons_misc.copy as d} |
|
<path {d} /> |
|
{/each} |
|
</svg> |
|
|
|
{#if naddr_copied}<span class="text-sm text-success opacity-50"> |
|
(copied to clipboard)</span |
|
>{/if} |
|
</h4> |
|
<p class="my-2 break-words text-xs">{naddr}</p> |
|
</div> |
|
{/if} |
|
</div>
|
|
|