this repo has no description
1{{ define "title" }}{{ or .UserHandle .UserDid }}{{ end }}
2
3{{ define "content" }}
4<div class="grid grid-cols-1 md:grid-cols-5 gap-6">
5 <div class="md:col-span-1 order-1 md:order-1">
6 {{ block "profileCard" . }}{{ end }}
7 </div>
8 <div class="md:col-span-2 order-2 md:order-2">
9 {{ block "ownRepos" . }}{{ end }}
10 {{ block "collaboratingRepos" . }}{{ end }}
11 </div>
12 <div class="md:col-span-2 order-3 md:order-3">
13 {{ block "profileTimeline" . }}{{ end }}
14 </div>
15</div>
16{{ end }}
17
18{{ define "profileTimeline" }}
19 <p class="text-sm font-bold py-2 dark:text-white">ACTIVITY</p>
20 <div class="flex flex-col gap-6 relative">
21 {{ with .ProfileTimeline }}
22 {{ range $idx, $byMonth := .ByMonth }}
23 {{ with $byMonth }}
24 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm">
25 {{ if eq $idx 0 }}
26 <p class="text-sm font-bold py-2 dark:text-white">This month</p>
27 {{ else }}
28 {{ $s := "s" }}
29 {{ if eq $idx 1 }}
30 {{ $s = "" }}
31 {{ end }}
32 <p class="text-sm font-bold py-2 dark:text-white">{{$idx}} month{{$s}} ago</p>
33 {{ end }}
34
35 <div class="flex flex-col gap-4">
36 {{ block "repoEvents" (list .RepoEvents $.DidHandleMap) }} {{ end }}
37 {{ block "issueEvents" (list .IssueEvents $.DidHandleMap) }} {{ end }}
38 {{ block "pullEvents" (list .PullEvents $.DidHandleMap) }} {{ end }}
39 </div>
40 </div>
41
42 {{ end }}
43 {{ else }}
44 <p class="dark:text-white">This user does not have any activity yet.</p>
45 {{ end }}
46 {{ end }}
47 </div>
48{{ end }}
49
50{{ define "repoEvents" }}
51 {{ $items := index . 0 }}
52 {{ $handleMap := index . 1 }}
53
54 {{ if gt (len $items) 0 }}
55 <details open>
56 <summary class="list-none cursor-pointer">
57 <div class="flex items-center gap-2">
58 created {{ len $items }} {{if eq (len $items) 1 }}repository{{else}}repositories{{end}}
59 </div>
60 </summary>
61 <div class="p-2 text-sm flex flex-col gap-3">
62 {{ range $items }}
63 <div class="flex flex-wrap items-center gap-2">
64 <span class="text-gray-500 dark:text-gray-400">
65 {{ if .Source }}
66 {{ i "git-fork" "w-4 h-4" }}
67 {{ else }}
68 {{ i "book-plus" "w-4 h-4" }}
69 {{ end }}
70 </span>
71 <a href="/{{ index $handleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">
72 {{- .Repo.Name -}}
73 </a>
74 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time>
75 </div>
76 {{ end }}
77 </div>
78 </details>
79 {{ end }}
80{{ end }}
81
82{{ define "issueEvents" }}
83 {{ $i := index . 0 }}
84 {{ $items := $i.Items }}
85 {{ $stats := $i.Stats }}
86 {{ $handleMap := index . 1 }}
87
88 {{ if gt (len $items) 0 }}
89 <details open>
90 <summary class="list-none cursor-pointer">
91 <div class="flex items-center gap-2">
92 <span>
93 created {{ len $items }} {{if eq (len $items) 1 }}issue{{else}}issues{{end}}
94 </span>
95 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-green-600 dark:bg-green-700">
96 {{$stats.Open}} open
97 </span>
98 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-gray-800 dark:bg-gray-700">
99 {{$stats.Closed}} closed
100 </span>
101 </div>
102 </summary>
103 <div class="p-2 text-sm flex flex-col gap-3">
104 {{ range $items }}
105 {{ $repoOwner := index $handleMap .Metadata.Repo.Did }}
106 {{ $repoName := .Metadata.Repo.Name }}
107 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
108
109 <div class="flex flex-wrap items-center gap-2 text-gray-600 dark:text-gray-300">
110 {{ if .Open }}
111 <span class="text-green-600 dark:text-green-500">
112 {{ i "circle-dot" "w-4 h-4" }}
113 </span>
114 {{ else }}
115 <span class="text-gray-500 dark:text-gray-400">
116 {{ i "ban" "w-4 h-4" }}
117 </span>
118 {{ end }}
119 <a href="/{{$repoUrl}}/issues/{{ .IssueId }}" class="no-underline hover:underline">
120 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span>
121 {{ .Title -}}
122 </a>
123 on
124 <a href="/{{$repoUrl}}" class="no-underline hover:underline">
125 {{$repoUrl}}
126 </a>
127 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Created | shortTimeFmt }}</time>
128 </p>
129 {{ end }}
130 </div>
131 </details>
132 {{ end }}
133{{ end }}
134
135{{ define "pullEvents" }}
136 {{ $i := index . 0 }}
137 {{ $items := $i.Items }}
138 {{ $stats := $i.Stats }}
139 {{ $handleMap := index . 1 }}
140 {{ if gt (len $items) 0 }}
141 <details open>
142 <summary class="list-none cursor-pointer">
143 <div class="flex items-center gap-2">
144 <span>
145 created {{ len $items }} {{if eq (len $items) 1 }}pull request{{else}}pull requests{{end}}
146 </span>
147 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-green-600 dark:bg-green-700">
148 {{$stats.Open}} open
149 </span>
150 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-purple-600 dark:bg-purple-700">
151 {{$stats.Merged}} merged
152 </span>
153 <span class="px-2 py-1/2 text-sm rounded-sm text-black dark:text-white bg-gray-50 dark:bg-gray-700 ">
154 {{$stats.Closed}} closed
155 </span>
156 </div>
157 </summary>
158 <div class="p-2 text-sm flex flex-col gap-3">
159 {{ range $items }}
160 {{ $repoOwner := index $handleMap .Repo.Did }}
161 {{ $repoName := .Repo.Name }}
162 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
163
164 <div class="flex flex-wrap items-center gap-2 text-gray-600 dark:text-gray-300">
165 {{ if .State.IsOpen }}
166 <span class="text-green-600 dark:text-green-500">
167 {{ i "git-pull-request" "w-4 h-4" }}
168 </span>
169 {{ else if .State.IsMerged }}
170 <span class="text-purple-600 dark:text-purple-500">
171 {{ i "git-merge" "w-4 h-4" }}
172 </span>
173 {{ else }}
174 <span class="text-gray-600 dark:text-gray-300">
175 {{ i "git-pull-request-closed" "w-4 h-4" }}
176 </span>
177 {{ end }}
178 <a href="/{{$repoUrl}}/pulls/{{ .PullId }}" class="no-underline hover:underline">
179 <span class="text-gray-500 dark:text-gray-400">#{{ .PullId }}</span>
180 {{ .Title -}}
181 </a>
182 on
183 <a href="/{{$repoUrl}}" class="no-underline hover:underline">
184 {{$repoUrl}}
185 </a>
186 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Created | shortTimeFmt }}</time>
187 </p>
188 {{ end }}
189 </div>
190 </details>
191 {{ end }}
192{{ end }}
193
194{{ define "profileCard" }}
195 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm max-h-fit">
196 <div class="flex justify-center items-center">
197 {{ if .AvatarUri }}
198 <img class="w-3/4 rounded-full p-2" src="{{ .AvatarUri }}" />
199 {{ end }}
200 </div>
201 <p
202 title="{{ didOrHandle .UserDid .UserHandle }}"
203 class="text-lg font-bold text-center dark:text-white overflow-hidden text-ellipsis whitespace-nowrap max-w-full"
204 >
205 {{ didOrHandle .UserDid .UserHandle }}
206 </p>
207 <div class="text-sm text-center dark:text-gray-300">
208 <span>{{ .ProfileStats.Followers }} followers</span>
209 <div
210 class="inline-block px-1 select-none after:content-['·']"
211 ></div>
212 <span>{{ .ProfileStats.Following }} following</span>
213 </div>
214
215 {{ if ne .FollowStatus.String "IsSelf" }}
216 {{ template "fragments/follow" . }}
217 {{ end }}
218 </div>
219{{ end }}
220
221{{ define "ownRepos" }}
222 <p class="text-sm font-bold py-2 px-6 dark:text-white">REPOS</p>
223 <div id="repos" class="grid grid-cols-1 gap-4 mb-6">
224 {{ range .Repos }}
225 <div
226 id="repo-card"
227 class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800"
228 >
229 <div id="repo-card-name" class="font-medium dark:text-white">
230 <a href="/@{{ or $.UserHandle $.UserDid }}/{{ .Name }}"
231 >{{ .Name }}</a
232 >
233 </div>
234 {{ if .Description }}
235 <div class="text-gray-600 dark:text-gray-300 text-sm">
236 {{ .Description }}
237 </div>
238 {{ end }}
239 <div
240 class="text-gray-400 pt-1 text-sm font-mono inline-flex gap-4 mt-auto"
241 >
242
243 {{ if .RepoStats.StarCount }}
244 <div class="flex gap-1 items-center text-sm">
245 {{ i "star" "w-3 h-3 fill-current" }}
246 <span>{{ .RepoStats.StarCount }}</span>
247 </div>
248 {{ end }}
249 </div>
250 </div>
251 {{ else }}
252 <p class="px-6 dark:text-white">This user does not have any repos yet.</p>
253 {{ end }}
254 </div>
255
256 <p class="text-sm font-bold py-2 px-6 dark:text-white">COLLABORATING ON</p>
257 <div id="collaborating" class="grid grid-cols-1 gap-4 mb-6">
258 {{ range .CollaboratingRepos }}
259 <div
260 id="repo-card"
261 class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800 flex flex-col"
262 >
263 <div id="repo-card-name" class="font-medium dark:text-white">
264 <a href="/{{ index $.DidHandleMap .Did }}/{{ .Name }}">
265 {{ index $.DidHandleMap .Did }}/{{ .Name }}
266 </a>
267 </div>
268 {{ if .Description }}
269 <div class="text-gray-600 dark:text-gray-300 text-sm">
270 {{ .Description }}
271 </div>
272 {{ end }}
273 <div class="text-gray-400 pt-1 text-sm font-mono inline-flex gap-4 mt-auto">
274
275 {{ if .RepoStats.StarCount }}
276 <div class="flex gap-1 items-center text-sm">
277 {{ i "star" "w-3 h-3 fill-current" }}
278 <span>{{ .RepoStats.StarCount }}</span>
279 </div>
280 {{ end }}
281 </div>
282 </div>
283 {{ else }}
284 <p class="px-6 dark:text-white">This user is not collaborating.</p>
285 {{ end }}
286 </div>
287{{ end }}