this repo has no description
1{{ define "title" }}{{ or .Card.UserHandle .Card.UserDid }}{{ end }}
2
3{{ define "extrameta" }}
4 <meta property="og:title" content="{{ or .Card.UserHandle .Card.UserDid }}" />
5 <meta property="og:type" content="profile" />
6 <meta
7 property="og:url"
8 content="https://tangled.sh/{{ or .Card.UserHandle .Card.UserDid }}" />
9 <meta
10 property="og:description"
11 content="{{ or .Card.Profile.Description .Card.UserHandle .Card.UserDid }}" />
12{{ end }}
13
14{{ define "content" }}
15 <div class="grid grid-cols-1 md:grid-cols-11 gap-4">
16 <div class="md:col-span-3 order-1 md:order-1">
17 <div class="grid grid-cols-1 gap-4">
18 {{ template "user/fragments/profileCard" .Card }}
19 {{ block "punchcard" .Punchcard }}{{ end }}
20 </div>
21 </div>
22 <div id="all-repos" class="md:col-span-4 order-2 md:order-2">
23 <div class="grid grid-cols-1 gap-4">
24 {{ block "ownRepos" . }}{{ end }}
25 {{ block "collaboratingRepos" . }}{{ end }}
26 </div>
27 </div>
28 <div class="md:col-span-4 order-3 md:order-3">
29 {{ block "profileTimeline" . }}{{ end }}
30 </div>
31 </div>
32{{ end }}
33
34{{ define "profileTimeline" }}
35 <p class="text-sm font-bold p-2 dark:text-white">ACTIVITY</p>
36 <div class="flex flex-col gap-4 relative">
37 {{ with .ProfileTimeline }}
38 {{ range $idx, $byMonth := .ByMonth }}
39 {{ with $byMonth }}
40 <div
41 class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm">
42 {{ if eq $idx 0 }}
43
44 {{ else }}
45 {{ $s := "s" }}
46 {{ if eq $idx 1 }}
47 {{ $s = "" }}
48 {{ end }}
49 <p class="text-sm font-bold dark:text-white mb-2">
50 {{ $idx }} month{{ $s }} ago
51 </p>
52 {{ end }}
53
54 {{ if .IsEmpty }}
55 <div class="text-gray-500 dark:text-gray-400">
56 No activity for this month
57 </div>
58 {{ else }}
59 <div class="flex flex-col gap-1">
60 {{ block "repoEvents" .RepoEvents }}{{ end }}
61 {{ block "issueEvents" .IssueEvents }}{{ end }}
62 {{ block "pullEvents" .PullEvents }}{{ end }}
63 </div>
64 {{ end }}
65 </div>
66 {{ end }}
67 {{ else }}
68 <p class="dark:text-white">This user does not have any activity yet.</p>
69 {{ end }}
70 {{ end }}
71 </div>
72{{ end }}
73
74{{ define "repoEvents" }}
75 {{ if gt (len .) 0 }}
76 <details>
77 <summary
78 class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
79 <div class="flex flex-wrap items-center gap-2">
80 {{ i "book-plus" "w-4 h-4" }}
81 created
82 {{ len . }}
83 {{ if eq (len .) 1 }}repository{{ else }}repositories{{ end }}
84 </div>
85 </summary>
86 <div class="py-2 text-sm flex flex-col gap-3 mb-2">
87 {{ range . }}
88 <div class="flex flex-wrap items-center gap-2">
89 <span class="text-gray-500 dark:text-gray-400">
90 {{ if .Source }}
91 {{ i "git-fork" "w-4 h-4" }}
92 {{ else }}
93 {{ i "book-plus" "w-4 h-4" }}
94 {{ end }}
95 </span>
96 <a
97 href="/{{ resolve .Repo.Did }}/{{ .Repo.Name }}"
98 class="no-underline hover:underline">
99 {{- .Repo.Name -}}
100 </a>
101 </div>
102 {{ end }}
103 </div>
104 </details>
105 {{ end }}
106{{ end }}
107
108{{ define "issueEvents" }}
109 {{ $items := .Items }}
110 {{ $stats := .Stats }}
111
112 {{ if gt (len $items) 0 }}
113 <details>
114 <summary
115 class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
116 <div class="flex flex-wrap items-center gap-2">
117 {{ i "circle-dot" "w-4 h-4" }}
118
119
120 <div>
121 created
122 {{ len $items }}
123 {{ if eq (len $items) 1 }}issue{{ else }}issues{{ end }}
124 </div>
125
126 {{ if gt $stats.Open 0 }}
127 <span
128 class="px-2 py-1/2 text-sm rounded text-white bg-green-600 dark:bg-green-700">
129 {{ $stats.Open }} open
130 </span>
131 {{ end }}
132
133 {{ if gt $stats.Closed 0 }}
134 <span
135 class="px-2 py-1/2 text-sm rounded text-white bg-gray-800 dark:bg-gray-700">
136 {{ $stats.Closed }} closed
137 </span>
138 {{ end }}
139
140 </div>
141 </summary>
142 <div class="py-2 text-sm flex flex-col gap-3 mb-2">
143 {{ range $items }}
144 {{ $repoOwner := resolve .Metadata.Repo.Did }}
145 {{ $repoName := .Metadata.Repo.Name }}
146 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
147
148
149 <div class="flex gap-2 text-gray-600 dark:text-gray-300">
150 {{ if .Open }}
151 <span class="text-green-600 dark:text-green-500">
152 {{ i "circle-dot" "w-4 h-4" }}
153 </span>
154 {{ else }}
155 <span class="text-gray-500 dark:text-gray-400">
156 {{ i "ban" "w-4 h-4" }}
157 </span>
158 {{ end }}
159 <div class="flex-none min-w-8 text-right">
160 <span class="text-gray-500 dark:text-gray-400">
161 #{{ .IssueId }}
162 </span>
163 </div>
164 <div class="break-words max-w-full">
165 <a
166 href="/{{ $repoUrl }}/issues/{{ .IssueId }}"
167 class="no-underline hover:underline">
168 {{ .Title -}}
169 </a>
170 on
171 <a
172 href="/{{ $repoUrl }}"
173 class="no-underline hover:underline whitespace-nowrap">
174 {{ $repoUrl }}
175 </a>
176 </div>
177 </div>
178 {{ end }}
179 </div>
180 </details>
181 {{ end }}
182{{ end }}
183
184{{ define "pullEvents" }}
185 {{ $items := .Items }}
186 {{ $stats := .Stats }}
187 {{ if gt (len $items) 0 }}
188 <details>
189 <summary
190 class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400">
191 <div class="flex flex-wrap items-center gap-2">
192 {{ i "git-pull-request" "w-4 h-4" }}
193
194
195 <div>
196 created
197 {{ len $items }}
198 {{ if eq (len $items) 1 }}
199 pull request
200 {{ else }}
201 pull requests
202 {{ end }}
203 </div>
204
205 {{ if gt $stats.Open 0 }}
206 <span
207 class="px-2 py-1/2 text-sm rounded text-white bg-green-600 dark:bg-green-700">
208 {{ $stats.Open }} open
209 </span>
210 {{ end }}
211
212 {{ if gt $stats.Merged 0 }}
213 <span
214 class="px-2 py-1/2 text-sm rounded text-white bg-purple-600 dark:bg-purple-700">
215 {{ $stats.Merged }} merged
216 </span>
217 {{ end }}
218
219 {{ if gt $stats.Closed 0 }}
220 <span
221 class="px-2 py-1/2 text-sm rounded text-white bg-gray-800 dark:bg-gray-700">
222 {{ $stats.Closed }} closed
223 </span>
224 {{ end }}
225
226 </div>
227 </summary>
228 <div class="py-2 text-sm flex flex-col gap-3 mb-2">
229 {{ range $items }}
230 {{ $repoOwner := resolve .Repo.Did }}
231 {{ $repoName := .Repo.Name }}
232 {{ $repoUrl := printf "%s/%s" $repoOwner $repoName }}
233
234
235 <div class="flex gap-2 text-gray-600 dark:text-gray-300">
236 {{ if .State.IsOpen }}
237 <span class="text-green-600 dark:text-green-500">
238 {{ i "git-pull-request" "w-4 h-4" }}
239 </span>
240 {{ else if .State.IsMerged }}
241 <span class="text-purple-600 dark:text-purple-500">
242 {{ i "git-merge" "w-4 h-4" }}
243 </span>
244 {{ else }}
245 <span class="text-gray-600 dark:text-gray-300">
246 {{ i "git-pull-request-closed" "w-4 h-4" }}
247 </span>
248 {{ end }}
249 <div class="flex-none min-w-8 text-right">
250 <span class="text-gray-500 dark:text-gray-400">
251 #{{ .PullId }}
252 </span>
253 </div>
254 <div class="break-words max-w-full">
255 <a
256 href="/{{ $repoUrl }}/pulls/{{ .PullId }}"
257 class="no-underline hover:underline">
258 {{ .Title -}}
259 </a>
260 on
261 <a
262 href="/{{ $repoUrl }}"
263 class="no-underline hover:underline whitespace-nowrap">
264 {{ $repoUrl }}
265 </a>
266 </div>
267 </div>
268 {{ end }}
269 </div>
270 </details>
271 {{ end }}
272{{ end }}
273
274{{ define "ownRepos" }}
275 <div>
276 <div
277 class="text-sm font-bold p-2 pr-0 dark:text-white flex items-center justify-between gap-2">
278 <a
279 href="/@{{ or $.Card.UserHandle $.Card.UserDid }}?tab=repos"
280 class="flex text-black dark:text-white items-center gap-2 no-underline hover:no-underline group">
281 <span>PINNED REPOS</span>
282 <span
283 class="flex gap-1 items-center font-normal text-sm text-gray-500 dark:text-gray-400 ">
284 view all
285 {{ i "chevron-right" "w-4 h-4" }}
286 </span>
287 </a>
288 {{ if and .LoggedInUser (eq .LoggedInUser.Did .Card.UserDid) }}
289 <button
290 hx-get="profile/edit-pins"
291 hx-target="#all-repos"
292 class="btn py-0 font-normal text-sm flex gap-2 items-center group">
293 {{ i "pencil" "w-3 h-3" }}
294 edit
295 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
296 </button>
297 {{ end }}
298 </div>
299 <div id="repos" class="grid grid-cols-1 gap-4 items-stretch">
300 {{ range .Repos }}
301 {{ template "user/fragments/repoCard" (list $ . false) }}
302 {{ else }}
303 <p class="px-6 dark:text-white">
304 This user does not have any repos yet.
305 </p>
306 {{ end }}
307 </div>
308 </div>
309{{ end }}
310
311{{ define "collaboratingRepos" }}
312 {{ if gt (len .CollaboratingRepos) 0 }}
313 <div>
314 <p class="text-sm font-bold p-2 dark:text-white">COLLABORATING ON</p>
315 <div id="collaborating" class="grid grid-cols-1 gap-4">
316 {{ range .CollaboratingRepos }}
317 {{ template "user/fragments/repoCard" (list $ . true) }}
318 {{ else }}
319 <p class="px-6 dark:text-white">This user is not collaborating.</p>
320 {{ end }}
321 </div>
322 </div>
323 {{ end }}
324{{ end }}
325
326{{ define "punchcard" }}
327 {{ $now := now }}
328 <div>
329 <p class="p-2 flex gap-2 text-sm font-bold dark:text-white">
330 PUNCHCARD
331 <span class="font-normal text-sm text-gray-500 dark:text-gray-400 ">
332 {{ .Total | int64 | commaFmt }} commits
333 </span>
334 </p>
335 <div class="bg-white dark:bg-gray-800 px-6 py-4 rounded drop-shadow-sm">
336 <div class="grid grid-cols-28 md:grid-cols-14 gap-y-2 w-full h-full">
337 {{ range .Punches }}
338 {{ $count := .Count }}
339 {{ $theme := "bg-gray-200 dark:bg-gray-700 size-[4px]" }}
340 {{ if lt $count 1 }}
341 {{ $theme = "bg-gray-200 dark:bg-gray-700 size-[4px]" }}
342 {{ else if lt $count 2 }}
343 {{ $theme = "bg-green-200 dark:bg-green-900 size-[5px]" }}
344 {{ else if lt $count 4 }}
345 {{ $theme = "bg-green-300 dark:bg-green-800 size-[5px]" }}
346 {{ else if lt $count 8 }}
347 {{ $theme = "bg-green-400 dark:bg-green-700 size-[6px]" }}
348 {{ else }}
349 {{ $theme = "bg-green-500 dark:bg-green-600 size-[7px]" }}
350 {{ end }}
351
352 {{ if .Date.After $now }}
353 {{ $theme = "border border-gray-200 dark:border-gray-700 size-[4px]" }}
354 {{ end }}
355 <div class="w-full h-full flex justify-center items-center">
356 <div
357 class="aspect-square rounded-full transition-all duration-300 {{ $theme }} max-w-full max-h-full"
358 title="{{ .Date.Format "2006-01-02" }}: {{ .Count }} commits"></div>
359 </div>
360 {{ end }}
361 </div>
362 </div>
363 </div>
364{{ end }}