1{{ define "timeline/fragments/timeline" }}
2 <div class="py-4">
3 <div class="px-6 pb-4">
4 <p class="text-xl font-bold dark:text-white">Timeline</p>
5 </div>
6
7 <div class="flex flex-col gap-4">
8 {{ range $i, $e := .Timeline }}
9 <div class="relative">
10 {{ if ne $i 0 }}
11 <div class="absolute left-8 -top-4 w-px h-4 bg-gray-300 dark:bg-gray-600"></div>
12 {{ end }}
13 {{ with $e }}
14 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm">
15 {{ if .Repo }}
16 {{ template "timeline/fragments/repoEvent" (list $ .) }}
17 {{ else if .Star }}
18 {{ template "timeline/fragments/starEvent" (list $ .) }}
19 {{ else if .Follow }}
20 {{ template "timeline/fragments/followEvent" (list $ .) }}
21 {{ end }}
22 </div>
23 {{ end }}
24 </div>
25 {{ end }}
26 </div>
27 </div>
28{{ end }}
29
30{{ define "timeline/fragments/repoEvent" }}
31 {{ $root := index . 0 }}
32 {{ $event := index . 1 }}
33 {{ $repo := $event.Repo }}
34 {{ $source := $event.Source }}
35 {{ $userHandle := resolve $repo.Did }}
36 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
37 {{ template "user/fragments/picHandleLink" $repo.Did }}
38 {{ with $source }}
39 {{ $sourceDid := resolve .Did }}
40 forked
41 <a href="/{{ $sourceDid }}/{{ .Name }}"class="no-underline hover:underline">
42 {{ $sourceDid }}/{{ .Name }}
43 </a>
44 to
45 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a>
46 {{ else }}
47 created
48 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">
49 {{ $repo.Name }}
50 </a>
51 {{ end }}
52 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span>
53 </div>
54 {{ with $repo }}
55 {{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }}
56 {{ end }}
57{{ end }}
58
59{{ define "timeline/fragments/starEvent" }}
60 {{ $root := index . 0 }}
61 {{ $event := index . 1 }}
62 {{ $star := $event.Star }}
63 {{ with $star }}
64 {{ $starrerHandle := resolve .StarredByDid }}
65 {{ $repoOwnerHandle := resolve .Repo.Did }}
66 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
67 {{ template "user/fragments/picHandleLink" $starrerHandle }}
68 starred
69 <a href="/{{ $repoOwnerHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline">
70 {{ $repoOwnerHandle | truncateAt30 }}/{{ .Repo.Name }}
71 </a>
72 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" .Created }}</span>
73 </div>
74 {{ with .Repo }}
75 {{ template "user/fragments/repoCard" (list $root . true true (dict "IsStarred" $event.IsStarred "RepoAt" .RepoAt "Stats" (dict "StarCount" $event.StarCount))) }}
76 {{ end }}
77 {{ end }}
78{{ end }}
79
80{{ define "timeline/fragments/followEvent" }}
81 {{ $root := index . 0 }}
82 {{ $event := index . 1 }}
83 {{ $follow := $event.Follow }}
84 {{ $profile := $event.Profile }}
85 {{ $followStats := $event.FollowStats }}
86 {{ $followStatus := $event.FollowStatus }}
87
88 {{ $userHandle := resolve $follow.UserDid }}
89 {{ $subjectHandle := resolve $follow.SubjectDid }}
90 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm">
91 {{ template "user/fragments/picHandleLink" $userHandle }}
92 followed
93 {{ template "user/fragments/picHandleLink" $subjectHandle }}
94 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $follow.FollowedAt }}</span>
95 </div>
96 {{ template "user/fragments/followCard"
97 (dict
98 "LoggedInUser" $root.LoggedInUser
99 "UserDid" $follow.SubjectDid
100 "Profile" $profile
101 "FollowStatus" $followStatus
102 "FollowersCount" $followStats.Followers
103 "FollowingCount" $followStats.Following) }}
104{{ end }}