A vibe coded tangled fork which supports pijul.
at 16f25ff5d55581ae0d83cbeac370393a081e2763 179 lines 6.5 kB view raw
1{{ define "timeline/fragments/preview" }} 2 <div class="flex flex-col gap-4 overflow-hidden"> 3 <div class="relative h-fit md:h-96 w-full"> 4 <!-- left fade overlay (fixed on left edge) --> 5 <div class="absolute left-0 top-0 h-full w-16 pointer-events-none z-10 bg-gradient-to-r from-white to-transparent dark:from-gray-900"></div> 6 7 <!-- right fade overlay (fixed on right edge) --> 8 <div class="absolute right-0 top-0 h-full w-16 pointer-events-none z-10 bg-gradient-to-l from-white to-transparent dark:from-gray-900"></div> 9 10 {{ template "marquee" $ }} 11 {{ template "marquee-mobile" $ }} 12 </div> 13 </div> 14{{ end }} 15 16{{ define "marquee" }} 17 {{ $rowOffsets := list 10 80 150 220 }} 18 {{ $prev := -1 }} 19 {{ $w := mul (len .Timeline) 150 }} 20 21 <div class="absolute h-full hidden md:flex animate-marquee"> 22 <div class="relative h-full flex-shrink-0 bottom-4 border-b border-gray-200 dark:border-gray-700" style="width: {{ $w }}px;"> 23 {{ range $i, $e := .Timeline }} 24 {{ $curr := randInt 4 }} 25 {{ if eq $curr $prev }} 26 {{ $curr = mod (add $curr 1) 4 }} 27 {{ end }} 28 {{ $offset := index $rowOffsets $curr }} 29 {{ template "timelineEvent" (list $i $e $offset) }} 30 {{ $prev = $curr }} 31 {{ end }} 32 </div> 33 34 <div 35 class="absolute left-0 bottom-0 h-3 flex-shrink-0 bg-[linear-gradient(to_right,currentColor_1px,transparent_1px)] bg-[length:6px_100%] bg-repeat-x text-gray-400 dark:text-gray-500" 36 style="width: {{ $w }}px;"> 37 </div> 38 39 </div> 40{{ end }} 41 42{{ define "marquee-mobile" }} 43 <div class="flex md:hidden flex-col gap-4 my-auto"> 44 {{ range $rowIndex := list 0 1 2 3 }} 45 {{ $offset := mul (add $rowIndex 2) 10 }} 46 {{ if eq (mod $rowIndex 2) 0 }} 47 {{ $offset = mul $offset -1 }} 48 {{ end }} 49 <div class="flex gap-4 overflow-hidden" style="padding-left: {{ $offset }}px; "> 50 <div class="flex gap-4 animate-marquee"> 51 {{ range $i, $e := $.Timeline }} 52 {{ if eq (mod $i 4) $rowIndex }} 53 <div class="flex-shrink-0"> 54 {{ template "eventCard" (list $ $e) }} 55 </div> 56 {{ end }} 57 {{ end }} 58 </div> 59 </div> 60 {{ end }} 61 </div> 62{{ end }} 63 64{{ define "eventCard" }} 65 {{ $root := index . 0 }} 66 {{ $e := index . 1 }} 67 {{ with $e }} 68 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-sm bg-white dark:bg-gray-800 drop-shadow-sm"> 69 {{ if .Repo }} 70 {{ template "repoEvent" (list $root .) }} 71 {{ else if .RepoStar }} 72 {{ template "starEvent" (list $root .) }} 73 {{ else if .Follow }} 74 {{ template "followEvent" (list $root .) }} 75 {{ end }} 76 </div> 77 {{ end }} 78{{ end }} 79 80{{ define "timelineEvent" }} 81 {{ $i := index . 0 }} 82 {{ $e := index . 1 }} 83 {{ $variance := randInt 10 }} 84 {{ $offset := add (index . 2) $variance }} 85 {{ $left := mul $i 175 }} 86 <div 87 class="absolute left-0" 88 style="bottom: {{ $offset }}px; left: {{ $left }}px; transform: translateX(-50%); z-index: 5;" 89 > 90 {{ template "eventCard" (list $ $e) }} 91 </div> 92 93 <!-- vertical connector --> 94 <div 95 class="absolute w-px bg-gray-300 dark:bg-gray-700" 96 style="left: {{ $left }}px; bottom: 0px; height: {{ $offset }}px; z-index: 0;" 97 ></div> 98 99 <!-- dot at the bottom --> 100 <div 101 class="absolute size-2 bg-gray-300 dark:bg-gray-600 rounded-full" 102 style="left: {{ sub $left 3 }}px; bottom: -3px; z-index: 0;"> 103 </div> 104{{ end }} 105 106{{ define "repoEvent" }} 107 {{ $root := index . 0 }} 108 {{ $event := index . 1 }} 109 {{ $repo := $event.Repo }} 110 {{ $source := $event.Source }} 111 {{ $userHandle := resolve $repo.Did }} 112 <div class="bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex w-max items-stretch divide-x divide-gray-200 dark:divide-gray-700 text-sm"> 113 <div class="p-4 bg-gray-100 dark:bg-gray-900/50 h-full"> 114 {{ i "folder-plus" "size-4" }} 115 </div> 116 <div class="px-4 flex items-center gap-2"> 117 {{ template "user/fragments/picHandleLink" $repo.Did }} 118 {{ with $source }} 119 {{ $sourceDid := resolve .Did }} 120 forked 121 <a href="/{{ $sourceDid }}/{{ .Name }}"class="no-underline hover:underline"> 122 {{ $sourceDid }}/{{ .Name }} 123 </a> 124 to 125 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a> 126 {{ else }} 127 created 128 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline"> 129 {{ $repo.Name }} 130 </a> 131 {{ end }} 132 </div> 133 </div> 134{{ end }} 135 136{{ define "starEvent" }} 137 {{ $root := index . 0 }} 138 {{ $event := index . 1 }} 139 {{ $star := $event.RepoStar }} 140 {{ with $star }} 141 {{ $starrerHandle := resolve .Did }} 142 {{ $repoOwnerHandle := resolve .Repo.Did }} 143 <div class="bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex w-max items-stretch divide-x divide-gray-200 dark:divide-gray-700 text-sm"> 144 <div class="p-4 bg-gray-100 dark:bg-gray-900/50 h-full"> 145 {{ i "star" "size-4" }} 146 </div> 147 <div class="px-4 flex items-center gap-2"> 148 {{ template "user/fragments/picHandleLink" $starrerHandle }} 149 starred 150 {{ template "user/fragments/pic" (list $repoOwnerHandle "size-6") }} 151 <a href="/{{ $repoOwnerHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline"> 152 {{ $repoOwnerHandle | truncateAt30 }}/{{ .Repo.Name }} 153 </a> 154 </div> 155 </div> 156 {{ end }} 157{{ end }} 158 159{{ define "followEvent" }} 160 {{ $root := index . 0 }} 161 {{ $event := index . 1 }} 162 {{ $follow := $event.Follow }} 163 {{ $profile := $event.Profile }} 164 {{ $followStats := $event.FollowStats }} 165 {{ $followStatus := $event.FollowStatus }} 166 167 {{ $userHandle := resolve $follow.UserDid }} 168 {{ $subjectHandle := resolve $follow.SubjectDid }} 169 <div class="bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex w-max items-stretch divide-x divide-gray-200 dark:divide-gray-700 text-sm"> 170 <div class="p-4 bg-gray-100 dark:bg-gray-900/50 h-full"> 171 {{ i "user-plus" "size-4" }} 172 </div> 173 <div class="px-4 flex items-center gap-2"> 174 {{ template "user/fragments/picHandleLink" $userHandle }} 175 followed 176 {{ template "user/fragments/picHandleLink" $subjectHandle }} 177 </div> 178 </div> 179{{ end }}