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 "profileTimeline2" . }}{{ end }}
14 </div>
15</div>
16{{ end }}
17
18{{ define "profileTimeline2" }}
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>
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 {{ i "unfold-vertical" "w-4 h-4" }}
59 created {{ len $items }} repositories
60 </div>
61 </summary>
62 <div class="p-2 pl-8 text-sm flex flex-col gap-3">
63 {{ range $items }}
64 <div class="flex flex-wrap items-center gap-2">
65 <span class="text-gray-500 dark:text-gray-400">
66 {{ if .Source }}
67 {{ i "git-fork" "w-4 h-4" }}
68 {{ else }}
69 {{ i "book-plus" "w-4 h-4" }}
70 {{ end }}
71 </span>
72 <a href="/{{ index $handleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">
73 {{- .Repo.Name -}}
74 </a>
75 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time>
76 </div>
77 {{ end }}
78 </div>
79 </details>
80 {{ end }}
81{{ end }}
82
83{{ define "issueEvents" }}
84 {{ $i := index . 0 }}
85 {{ $items := $i.Items }}
86 {{ $stats := $i.Stats }}
87 {{ $handleMap := index . 1 }}
88
89 {{ if gt (len $items) 0 }}
90 <details open>
91 <summary class="list-none cursor-pointer">
92 <div class="flex items-center gap-2">
93 {{ i "unfold-vertical" "w-4 h-4" }}
94 <span>
95 created {{ len $items }} issues
96 </span>
97 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-green-600 dark:bg-green-700">
98 {{$stats.Open}} open
99 </span>
100 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-gray-800 dark:bg-gray-700">
101 {{$stats.Closed}} closed
102 </span>
103 </div>
104 </summary>
105 <div class="p-2 pl-8 text-sm flex flex-col gap-3">
106 {{ range $items }}
107 {{ $repoOwner := index $handleMap .Metadata.Repo.Did }}
108 {{ $repoName := .Metadata.Repo.Name }}
109 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
110
111 <div class="flex flex-wrap items-center gap-2 text-gray-600 dark:text-gray-300">
112 {{ if .Open }}
113 <span class="text-green-600 dark:text-green-500">
114 {{ i "circle-dot" "w-4 h-4" }}
115 </span>
116 {{ else }}
117 <span class="text-gray-500 dark:text-gray-400">
118 {{ i "ban" "w-4 h-4" }}
119 </span>
120 {{ end }}
121 <a href="/{{$repoUrl}}/issues/{{ .IssueId }}" class="no-underline hover:underline">
122 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span>
123 {{ .Title -}}
124 </a>
125 on
126 <a href="/{{$repoUrl}}" class="no-underline hover:underline">
127 {{$repoUrl}}
128 </a>
129 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Created | shortTimeFmt }}</time>
130 </p>
131 {{ end }}
132 </div>
133 </details>
134 {{ end }}
135{{ end }}
136
137{{ define "pullEvents" }}
138 {{ $i := index . 0 }}
139 {{ $items := $i.Items }}
140 {{ $stats := $i.Stats }}
141 {{ $handleMap := index . 1 }}
142 {{ if gt (len $items) 0 }}
143 <details open>
144 <summary class="list-none cursor-pointer">
145 <div class="flex items-center gap-2">
146 {{ i "unfold-vertical" "w-4 h-4" }}
147 <span>
148 created {{ len $items }} pull requests
149 </span>
150 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-green-600 dark:bg-green-700">
151 {{$stats.Open}} open
152 </span>
153 <span class="px-2 py-1/2 text-sm rounded-sm text-white bg-purple-600 dark:bg-purple-700">
154 {{$stats.Merged}} merged
155 </span>
156 <span class="px-2 py-1/2 text-sm rounded-sm text-black dark:text-white bg-gray-50 dark:bg-gray-700 ">
157 {{$stats.Closed}} closed
158 </span>
159 </div>
160 </summary>
161 <div class="p-2 pl-8 text-sm flex flex-col gap-3">
162 {{ range $items }}
163 {{ $repoOwner := index $handleMap .Repo.Did }}
164 {{ $repoName := .Repo.Name }}
165 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
166
167 <div class="flex flex-wrap items-center gap-2 text-gray-600 dark:text-gray-300">
168 {{ if .State.IsOpen }}
169 <span class="text-green-600 dark:text-green-500">
170 {{ i "git-pull-request" "w-4 h-4" }}
171 </span>
172 {{ else if .State.IsMerged }}
173 <span class="text-purple-600 dark:text-purple-500">
174 {{ i "git-merge" "w-4 h-4" }}
175 </span>
176 {{ else }}
177 <span class="text-gray-600 dark:text-gray-300">
178 {{ i "git-pull-request-closed" "w-4 h-4" }}
179 </span>
180 {{ end }}
181 <a href="/{{$repoUrl}}/pulls/{{ .PullId }}" class="no-underline hover:underline">
182 <span class="text-gray-500 dark:text-gray-400">#{{ .PullId }}</span>
183 {{ .Title -}}
184 </a>
185 on
186 <a href="/{{$repoUrl}}" class="no-underline hover:underline">
187 {{$repoUrl}}
188 </a>
189 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Created | shortTimeFmt }}</time>
190 </p>
191 {{ end }}
192 </div>
193 </details>
194 {{ end }}
195{{ end }}
196
197{{ define "profileTimeline" }}
198 <div class="flex flex-col gap-3 relative">
199 <p class="px-6 text-sm font-bold py-2 dark:text-white">ACTIVITY</p>
200 {{ range .ProfileTimeline }}
201 {{ if eq .Type "issue" }}
202 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit max-w-full flex items-center gap-2">
203 {{ $textColor := "text-gray-800 dark:text-gray-400" }}
204 {{ $icon := "ban" }}
205 {{ if .Issue.Open }}
206 {{ $textColor = "text-green-600 dark:text-green-500" }}
207 {{ $icon = "circle-dot" }}
208 {{ end }}
209 <div class="p-1 {{ $textColor }}">
210 {{ i $icon "w-5 h-5" }}
211 </div>
212 <div>
213 <p class="text-gray-600 dark:text-gray-300">
214 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}/issues/{{ .Issue.IssueId }}" class="no-underline hover:underline">{{ .Issue.Title }} <span class="text-gray-500 dark:text-gray-400">#{{ .Issue.IssueId }}</span></a>
215 on
216 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ index $.DidHandleMap .Repo.Did }}<span class="select-none">/</span>{{ .Repo.Name }}</a>
217 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Issue.Created | shortTimeFmt }}</time>
218 </p>
219 </div>
220 </div>
221 {{ else if eq .Type "pull" }}
222 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit flex items-center gap-3">
223 {{ $textColor := "text-gray-800 dark:text-gray-400" }}
224 {{ $icon := "git-pull-request-closed" }}
225 {{ if .Pull.State.IsOpen }}
226 {{ $textColor = "text-green-600 dark:text-green-500" }}
227 {{ $icon = "git-pull-request" }}
228 {{ else if .Pull.State.IsMerged }}
229 {{ $textColor = "text-purple-600 dark:text-purple-500" }}
230 {{ $icon = "git-merge" }}
231 {{ end }}
232 <div class="{{ $textColor }} p-1">
233 {{ i $icon "w-5 h-5" }}
234 </div>
235 <div>
236 <p class="text-gray-600 dark:text-gray-300">
237 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}/pulls/{{ .Pull.PullId }}" class="no-underline hover:underline">{{ .Pull.Title }} <span class="text-gray-500 dark:text-gray-400">#{{ .Pull.PullId }}</span></a>
238 on
239 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">
240 {{ index $.DidHandleMap .Repo.Did }}<span class="select-none">/</span>{{ .Repo.Name }}</a>
241 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Pull.Created | shortTimeFmt }}</time>
242 </p>
243 </div>
244 </div>
245 {{ else if eq .Type "repo" }}
246 <div class="px-6 py-2 bg-white dark:bg-gray-800 rounded drop-shadow-sm w-fit flex items-center gap-3">
247 {{ if .Source }}
248 <div class="text-gray-800 dark:text-gray-400 p-1">
249 {{ i "git-fork" "w-5 h-5" }}
250 </div>
251 {{ else }}
252 <div class="text-gray-800 dark:text-gray-400 p-1">
253 {{ i "book-plus" "w-5 h-5" }}
254 </div>
255 {{ end }}
256 <div>
257 <p class="text-gray-600 dark:text-gray-300">
258
259 {{ if .Source }}
260 forked
261 <a href="/{{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}" class="no-underline hover:underline">
262 {{ index $.DidHandleMap .Source.Did }}/{{ .Source.Name }}
263 </a>
264 to
265 <a href="/{{ didOrHandle $.UserHandle $.UserDid }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
266 {{ else }}
267 created
268 <a href="/{{ index $.DidHandleMap .Repo.Did }}/{{ .Repo.Name }}" class="no-underline hover:underline">{{ .Repo.Name }}</a>
269 {{ end }}
270 <time class="text-gray-700 dark:text-gray-400 text-xs ml-2">{{ .Repo.Created | shortTimeFmt }}</time>
271 </p>
272 </div>
273 </div>
274 {{ end }}
275 {{ else }}
276 <p class="px-6 dark:text-white">This user does not have any activity yet.</p>
277 {{ end }}
278 </div>
279{{ end }}
280
281{{ define "profileCard" }}
282 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm max-h-fit">
283 <div class="flex justify-center items-center">
284 {{ if .AvatarUri }}
285 <img class="w-3/4 rounded-full p-2" src="{{ .AvatarUri }}" />
286 {{ end }}
287 </div>
288 <p
289 title="{{ didOrHandle .UserDid .UserHandle }}"
290 class="text-lg font-bold text-center dark:text-white overflow-hidden text-ellipsis whitespace-nowrap max-w-full"
291 >
292 {{ didOrHandle .UserDid .UserHandle }}
293 </p>
294 <div class="text-sm text-center dark:text-gray-300">
295 <span>{{ .ProfileStats.Followers }} followers</span>
296 <div
297 class="inline-block px-1 select-none after:content-['·']"
298 ></div>
299 <span>{{ .ProfileStats.Following }} following</span>
300 </div>
301
302 {{ if ne .FollowStatus.String "IsSelf" }}
303 {{ template "fragments/follow" . }}
304 {{ end }}
305 </div>
306{{ end }}
307
308{{ define "ownRepos" }}
309 <p class="text-sm font-bold py-2 px-6 dark:text-white">REPOS</p>
310 <div id="repos" class="grid grid-cols-1 gap-4 mb-6">
311 {{ range .Repos }}
312 <div
313 id="repo-card"
314 class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800"
315 >
316 <div id="repo-card-name" class="font-medium dark:text-white">
317 <a href="/@{{ or $.UserHandle $.UserDid }}/{{ .Name }}"
318 >{{ .Name }}</a
319 >
320 </div>
321 {{ if .Description }}
322 <div class="text-gray-600 dark:text-gray-300 text-sm">
323 {{ .Description }}
324 </div>
325 {{ end }}
326 <div
327 class="text-gray-400 pt-1 text-sm font-mono inline-flex gap-4 mt-auto"
328 >
329
330 {{ if .RepoStats.StarCount }}
331 <div class="flex gap-1 items-center text-sm">
332 {{ i "star" "w-3 h-3 fill-current" }}
333 <span>{{ .RepoStats.StarCount }}</span>
334 </div>
335 {{ end }}
336 </div>
337 </div>
338 {{ else }}
339 <p class="px-6 dark:text-white">This user does not have any repos yet.</p>
340 {{ end }}
341 </div>
342
343 <p class="text-sm font-bold py-2 px-6 dark:text-white">COLLABORATING ON</p>
344 <div id="collaborating" class="grid grid-cols-1 gap-4 mb-6">
345 {{ range .CollaboratingRepos }}
346 <div
347 id="repo-card"
348 class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800 flex flex-col"
349 >
350 <div id="repo-card-name" class="font-medium dark:text-white">
351 <a href="/{{ index $.DidHandleMap .Did }}/{{ .Name }}">
352 {{ index $.DidHandleMap .Did }}/{{ .Name }}
353 </a>
354 </div>
355 {{ if .Description }}
356 <div class="text-gray-600 dark:text-gray-300 text-sm">
357 {{ .Description }}
358 </div>
359 {{ end }}
360 <div class="text-gray-400 pt-1 text-sm font-mono inline-flex gap-4 mt-auto">
361
362 {{ if .RepoStats.StarCount }}
363 <div class="flex gap-1 items-center text-sm">
364 {{ i "star" "w-3 h-3 fill-current" }}
365 <span>{{ .RepoStats.StarCount }}</span>
366 </div>
367 {{ end }}
368 </div>
369 </div>
370 {{ else }}
371 <p class="px-6 dark:text-white">This user is not collaborating.</p>
372 {{ end }}
373 </div>
374{{ end }}