This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / web / src / lib / components / repo / CommitView.svelte
1.7 kB 60 lines
1<script lang="ts"> 2 import { resolve } from "$app/paths"; 3 import type { DiffFile, DiffStat } from "$lib/api/diff"; 4 import type { CommitDetail } from "$lib/api/repo"; 5 import { FULL_HASH_RE } from "$lib/api/repo"; 6 import CommitHeader from "./CommitHeader.svelte"; 7 import DiffView from "./DiffView.svelte"; 8 import type { DiffStyle } from "./pierre"; 9 import TabPanel from "$lib/components/ui/TabPanel.svelte"; 10 11 interface Props { 12 ownerHandle: string; 13 repoName: string; 14 // the ref the page was loaded with. raw downloads only work for full hashes 15 ref: string; 16 commit: CommitDetail; 17 // hex of the first parent, empty for a root commit 18 parent?: string; 19 changeId?: string; 20 files: DiffFile[]; 21 stat?: DiffStat; 22 // side-by-side or stacked 23 diffStyle?: DiffStyle; 24 // server-prerendered shadow dom per row key, only for the initial ssr 25 prerendered?: Record<string, string>; 26 } 27 28 let { 29 ownerHandle, 30 repoName, 31 ref, 32 commit, 33 parent = "", 34 changeId = "", 35 files, 36 stat, 37 diffStyle = "unified", 38 prerendered 39 }: Props = $props(); 40 41 const base = $derived(`/${ownerHandle}/${repoName}`); 42 43 // the raw commit route only accepts full sha1/sha256 hex, anything shorter 404s 44 const downloadUrls = $derived( 45 FULL_HASH_RE.test(ref) 46 ? { 47 patch: resolve(`${base}/commit/${ref}.patch` as "/"), 48 diff: resolve(`${base}/commit/${ref}.diff` as "/") 49 } 50 : undefined 51 ); 52 const blobBase = $derived(resolve(`${base}/blob/${encodeURIComponent(ref)}` as "/")); 53</script> 54 55<div class="flex flex-col gap-4"> 56 <TabPanel> 57 <CommitHeader {ownerHandle} {repoName} {commit} {parent} {changeId} /> 58 </TabPanel> 59 <DiffView {files} {stat} {diffStyle} {downloadUrls} {blobBase} {prerendered} /> 60</div>