From c380c40e9d81333e69f498fbc4790181706df10a Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Mon, 1 Apr 2024 17:02:39 +0100 Subject: [PATCH] feat(init): support multiple git_servers in line with initial merged nip34 spec --- src/lib/components/repo/RepoDetails.svelte | 42 ++++++++++++++++++---- src/lib/components/repo/type.ts | 4 +-- src/lib/components/repo/vectors.ts | 4 +-- src/lib/stores/repo.ts | 9 +++-- src/lib/stores/repos.ts | 10 +++++- 5 files changed, 54 insertions(+), 15 deletions(-) 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} + + {#each icons_misc.copy as d} + + {/each} + + {#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,