Browse Source

feat(init): support multiple git_servers

in line with initial merged nip34 spec
master
DanConwayDev 2 years ago
parent
commit
c380c40e9d
No known key found for this signature in database
GPG Key ID: 68E15486D73F75E1
  1. 40
      src/lib/components/repo/RepoDetails.svelte
  2. 4
      src/lib/components/repo/type.ts
  3. 4
      src/lib/components/repo/vectors.ts
  4. 9
      src/lib/stores/repo.ts
  5. 10
      src/lib/stores/repos.ts

40
src/lib/components/repo/RepoDetails.svelte

@ -24,6 +24,7 @@ @@ -24,6 +24,7 @@
? 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">
@ -92,13 +93,40 @@ @@ -92,13 +93,40 @@
<div />
{:else}
<h4>clone</h4>
<a
href={clone}
target="_blank"
class="link link-primary my-2 break-words text-sm"
{#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}
>
{clone}
</a>
{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 group-hover:opacity-100"
class:fill-base-content={git_url_copied !== git_url}
class:fill-success={git_url_copied === git_url}
>
{#each icons_misc.copy as d}
<path {d} />
{/each}
</svg>
{#if git_url_copied === git_url}<span class="text-xs text-success">
(copied to clipboard)</span
>{/if}
</div>
{/each}
{/if}
</div>
<div>

4
src/lib/components/repo/type.ts

@ -7,7 +7,7 @@ export interface RepoEvent { @@ -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 = { @@ -23,7 +23,7 @@ export const event_defaults: RepoEvent = {
unique_commit: '',
name: '',
description: '',
clone: '',
clone: [],
web: [],
tags: [],
maintainers: [],

4
src/lib/components/repo/vectors.ts

@ -38,7 +38,7 @@ const base: RepoEvent = { @@ -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 = { @@ -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,

9
src/lib/stores/repo.ts

@ -84,7 +84,7 @@ export const selected_repo_readme: Writable<RepoReadme> = writable({ @@ -84,7 +84,7 @@ export const selected_repo_readme: Writable<RepoReadme> = writable({
})
const ensureRepoReadme = async (
clone: string,
clone: string[],
unique_commit_or_identifier: string
): Promise<void> => {
selected_repo_readme.set({ ...readme_defaults })
@ -105,7 +105,9 @@ const ensureRepoReadme = async ( @@ -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 ( @@ -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'
}

10
src/lib/stores/repos.ts

@ -251,6 +251,14 @@ export const eventToRepoEvent = (event: NDKEvent): RepoEvent | undefined => { @@ -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 => { @@ -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,

Loading…
Cancel
Save