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