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