forked from tangled.org/core
Monorepo for Tangled — https://tangled.org
1{{ define "title" }}timeline{{ end }} 2 3{{ define "extrameta" }} 4 <meta property="og:title" content="timeline · tangled" /> 5 <meta property="og:type" content="object" /> 6 <meta property="og:url" content="https://tangled.sh" /> 7 <meta property="og:description" content="see what's tangling" /> 8{{ end }} 9 10{{ define "topbar" }} 11 {{ template "layouts/topbar" $ }} 12{{ end }} 13 14{{ define "content" }} 15 {{ with .LoggedInUser }} 16 {{ block "timeline" $ }}{{ end }} 17 {{ else }} 18 {{ block "hero" $ }}{{ end }} 19 {{ block "timeline" $ }}{{ end }} 20 {{ end }} 21{{ end }} 22 23{{ define "hero" }} 24 <div class="flex flex-col text-black dark:text-white p-6 gap-6 max-w-xl"> 25 <div class="font-bold text-4xl">tightly-knit<br>social coding.</div> 26 27 <p class="text-lg"> 28 tangled is new social-enabled git collaboration platform built on <a class="underline" href="https://atproto.com/">atproto</a>. 29 </p> 30 <p class="text-lg"> 31 we envision a place where developers have complete ownership of their 32 code, open source communities can freely self-govern and most 33 importantly, coding can be social and fun again. 34 </p> 35 36 <div class="flex gap-6 items-center"> 37 <a href="/signup" class="no-underline hover:no-underline "> 38 <button class="btn-create flex gap-2 px-4 items-center"> 39 join now {{ i "arrow-right" "size-4" }} 40 </button> 41 </a> 42 </div> 43 </div> 44{{ end }} 45 46{{ define "timeline" }} 47 <div> 48 <div class="p-6"> 49 <p class="text-xl font-bold dark:text-white">Timeline</p> 50 </div> 51 52 <div class="flex flex-col gap-4"> 53 {{ range $i, $e := .Timeline }} 54 <div class="relative"> 55 {{ if ne $i 0 }} 56 <div class="absolute left-8 -top-4 w-px h-4 bg-gray-300 dark:bg-gray-600"></div> 57 {{ end }} 58 {{ with $e }} 59 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm"> 60 {{ if .Repo }} 61 {{ block "repoEvent" (list $ .Repo .Source) }} {{ end }} 62 {{ else if .Star }} 63 {{ block "starEvent" (list $ .Star) }} {{ end }} 64 {{ else if .Follow }} 65 {{ block "followEvent" (list $ .Follow .Profile .FollowStats) }} {{ end }} 66 {{ end }} 67 </div> 68 {{ end }} 69 </div> 70 {{ end }} 71 </div> 72 </div> 73{{ end }} 74 75{{ define "repoEvent" }} 76 {{ $root := index . 0 }} 77 {{ $repo := index . 1 }} 78 {{ $source := index . 2 }} 79 {{ $userHandle := resolve $repo.Did }} 80 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm"> 81 {{ template "user/fragments/picHandleLink" $repo.Did }} 82 {{ with $source }} 83 {{ $sourceDid := resolve .Did }} 84 forked 85 <a href="/{{ $sourceDid }}/{{ .Name }}"class="no-underline hover:underline"> 86 {{ $sourceDid }}/{{ .Name }} 87 </a> 88 to 89 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a> 90 {{ else }} 91 created 92 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline"> 93 {{ $repo.Name }} 94 </a> 95 {{ end }} 96 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $repo.Created }}</span> 97 </div> 98 {{ with $repo }} 99 {{ template "user/fragments/repoCard" (list $root . true) }} 100 {{ end }} 101{{ end }} 102 103{{ define "starEvent" }} 104 {{ $root := index . 0 }} 105 {{ $star := index . 1 }} 106 {{ with $star }} 107 {{ $starrerHandle := resolve .StarredByDid }} 108 {{ $repoOwnerHandle := resolve .Repo.Did }} 109 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm"> 110 {{ template "user/fragments/picHandleLink" $starrerHandle }} 111 starred 112 <a href="/{{ $repoOwnerHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline"> 113 {{ $repoOwnerHandle | truncateAt30 }}/{{ .Repo.Name }} 114 </a> 115 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" .Created }}</span> 116 </div> 117 {{ with .Repo }} 118 {{ template "user/fragments/repoCard" (list $root . true) }} 119 {{ end }} 120 {{ end }} 121{{ end }} 122 123 124{{ define "followEvent" }} 125 {{ $root := index . 0 }} 126 {{ $follow := index . 1 }} 127 {{ $profile := index . 2 }} 128 {{ $stat := index . 3 }} 129 130 {{ $userHandle := resolve $follow.UserDid }} 131 {{ $subjectHandle := resolve $follow.SubjectDid }} 132 <div class="pl-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex flex-wrap items-center gap-2 text-sm"> 133 {{ template "user/fragments/picHandleLink" $userHandle }} 134 followed 135 {{ template "user/fragments/picHandleLink" $subjectHandle }} 136 <span class="text-gray-700 dark:text-gray-400 text-xs">{{ template "repo/fragments/time" $follow.FollowedAt }}</span> 137 </div> 138 <div class="py-4 px-6 drop-shadow-sm rounded bg-white dark:bg-gray-800 flex items-center gap-4"> 139 <div class="flex-shrink-0 max-h-full w-24 h-24"> 140 <img class="object-cover rounded-full p-2" src="{{ fullAvatar $subjectHandle }}" /> 141 </div> 142 143 <div class="flex-1 min-h-0 justify-around flex flex-col"> 144 <a href="/{{ $subjectHandle }}"> 145 <span class="font-bold dark:text-white overflow-hidden text-ellipsis whitespace-nowrap max-w-full">{{ $subjectHandle | truncateAt30 }}</span> 146 </a> 147 {{ with $profile }} 148 {{ with .Description }} 149 <p class="text-sm pb-2 md:pb-2">{{.}}</p> 150 {{ end }} 151 {{ end }} 152 {{ with $stat }} 153 <div class="text-sm flex items-center gap-2 my-2 overflow-hidden text-ellipsis whitespace-nowrap max-w-full text-sm"> 154 <span class="flex-shrink-0">{{ i "users" "size-4" }}</span> 155 <span id="followers">{{ .Followers }} followers</span> 156 <span class="select-none after:content-['·']"></span> 157 <span id="following">{{ .Following }} following</span> 158 </div> 159 {{ end }} 160 </div> 161 </div> 162{{ end }}