diff --git a/src/lib/components/repo/RepoDetails.svelte b/src/lib/components/repo/RepoDetails.svelte
index 1ffeee7..312f9b8 100644
--- a/src/lib/components/repo/RepoDetails.svelte
+++ b/src/lib/components/repo/RepoDetails.svelte
@@ -24,6 +24,7 @@
? description.slice(0, 450) + '...'
: description
let naddr_copied = false
+ let git_url_copied: false | string = false
@@ -92,13 +93,40 @@
{:else}
clone
-
- {clone}
-
+ {#each clone as git_url}
+
+
+
{
+ 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}
+
+ {#if git_url_copied === git_url}
+ (copied to clipboard){/if}
+
+ {/each}
{/if}
diff --git a/src/lib/components/repo/type.ts b/src/lib/components/repo/type.ts
index 00e1038..78c879e 100644
--- a/src/lib/components/repo/type.ts
+++ b/src/lib/components/repo/type.ts
@@ -7,7 +7,7 @@ export interface RepoEvent {
unique_commit: string | undefined
name: string
description: string
- clone: string
+ clone: string[]
web: string[]
tags: string[]
maintainers: User[]
@@ -23,7 +23,7 @@ export const event_defaults: RepoEvent = {
unique_commit: '',
name: '',
description: '',
- clone: '',
+ clone: [],
web: [],
tags: [],
maintainers: [],
diff --git a/src/lib/components/repo/vectors.ts b/src/lib/components/repo/vectors.ts
index 0798b1b..9b33d82 100644
--- a/src/lib/components/repo/vectors.ts
+++ b/src/lib/components/repo/vectors.ts
@@ -38,7 +38,7 @@ const base: RepoEvent = {
unique_commit: '9ee507fc4357d7ee16a5d8901bedcd103f23c17d',
name: 'Short Name',
description: 'short description',
- clone: 'github.com/example/example',
+ clone: ['github.com/example/example'],
tags: ['svelte', 'nostr', 'code-collaboration', 'git'],
relays: ['relay.damus.io', 'relay.snort.social', 'relayable.org'],
maintainers: [
@@ -71,7 +71,7 @@ export const RepoDetailsArgsVectors = {
NoNameOrDescription: { ...base, name: '', description: '' } as RepoEvent,
NoDescription: { ...base, description: '' } as RepoEvent,
NoTags: { ...base, tags: [] } as RepoEvent,
- NoGitServer: { ...base, clone: '' } as RepoEvent,
+ NoGitServer: { ...base, clone: [''] } as RepoEvent,
NoWeb: { ...base, web: [] } as RepoEvent,
MaintainersOneProfileNotLoaded: {
...base,
diff --git a/src/lib/stores/repo.ts b/src/lib/stores/repo.ts
index a0f2095..8056d01 100644
--- a/src/lib/stores/repo.ts
+++ b/src/lib/stores/repo.ts
@@ -84,7 +84,7 @@ export const selected_repo_readme: Writable = writable({
})
const ensureRepoReadme = async (
- clone: string,
+ clone: string[],
unique_commit_or_identifier: string
): Promise => {
selected_repo_readme.set({ ...readme_defaults })
@@ -105,7 +105,9 @@ const ensureRepoReadme = async (
}
}
try {
- const github_details = extractGithubDetails(clone)
+ const github_details = clone
+ .map(extractGithubDetails)
+ .find((details) => !!details)
let res: Response
if (github_details) {
try {
@@ -120,7 +122,8 @@ const ensureRepoReadme = async (
`https://raw.githubusercontent.com/${github_details.org}/${github_details.repo_name}/HEAD/readme.md`
)
}
- } else res = await fetch(`/git_proxy/readme/${encodeURIComponent(clone)}`)
+ } else
+ res = await fetch(`/git_proxy/readme/${encodeURIComponent(clone[0])}`)
if (!res.ok) {
throw 'api request error'
}
diff --git a/src/lib/stores/repos.ts b/src/lib/stores/repos.ts
index 2522c09..f78dd44 100644
--- a/src/lib/stores/repos.ts
+++ b/src/lib/stores/repos.ts
@@ -251,6 +251,14 @@ export const eventToRepoEvent = (event: NDKEvent): RepoEvent | undefined => {
}
})
})
+ const clone: string[] = []
+ event.getMatchingTags('clone').forEach((t: string[]) => {
+ t.forEach((v, i) => {
+ if (i > 0) {
+ clone.push(v)
+ }
+ })
+ })
return {
event_id: event.id,
naddr: event.encode(),
@@ -258,7 +266,7 @@ export const eventToRepoEvent = (event: NDKEvent): RepoEvent | undefined => {
unique_commit: event.tagValue('r') || undefined,
name: event.tagValue('name') || '',
description: event.tagValue('description') || '',
- clone: event.tagValue('clone') || '',
+ clone,
web,
tags: event.getMatchingTags('t').map((t) => t[1]) || [],
maintainers,