A vibe coded tangled fork which supports pijul.
at 90571506ff21b14e9226b941bed0baa928d99ccd 133 lines 4.9 kB view raw
1{{ define "timeline/fragments/preview" }} 2 <div class="flex flex-col gap-4 overflow-hidden"> 3 <div class="relative h-80 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 </div> 12 </div> 13{{ end }} 14 15{{ define "marquee" }} 16 {{ $rowOffsets := list 10 80 150 220 }} 17 {{ $prev := -1 }} 18 {{ $w := mul (len .Timeline) 150 }} 19 20 <div class="absolute h-full flex animate-marquee"> 21 <div class="relative h-full flex-shrink-0 bottom-4 border-b border-gray-200 dark:border-gray-700" style="width: {{ $w }}px;"> 22 {{ range $i, $e := .Timeline }} 23 {{ $curr := randInt 4 }} 24 {{ if eq $curr $prev }} 25 {{ $curr = mod (add $curr 1) 4 }} 26 {{ end }} 27 {{ $offset := index $rowOffsets $curr }} 28 {{ template "timelineEvent" (list $i $e $offset) }} 29 {{ $prev = $curr }} 30 {{ end }} 31 </div> 32 33 <div 34 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" 35 style="width: {{ $w }}px;"> 36 </div> 37 38 </div> 39{{ end }} 40 41{{ define "timelineEvent" }} 42 {{ $i := index . 0 }} 43 {{ $e := index . 1 }} 44 {{ $variance := randInt 10 }} 45 {{ $offset := add (index . 2) $variance }} 46 {{ $left := mul $i 175 }} 47 {{ with $e }} 48 <div 49 class="absolute left-0 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" 50 style="bottom: {{ $offset }}px; left: {{ $left }}px; transform: translateX(-50%); z-index: 5;" 51 > 52 {{ if .Repo }} 53 {{ template "repoEvent" (list $ .) }} 54 {{ else if .RepoStar }} 55 {{ template "starEvent" (list $ .) }} 56 {{ else if .Follow }} 57 {{ template "followEvent" (list $ .) }} 58 {{ end }} 59 </div> 60 {{ end }} 61 62 <!-- vertical connector --> 63 <div 64 class="absolute w-px bg-gray-300 dark:bg-gray-700" 65 style="left: {{ $left }}px; bottom: 0px; height: {{ $offset }}px; z-index: 0;" 66 ></div> 67 68 <!-- dot at the bottom --> 69 <div 70 class="absolute size-2 bg-gray-300 dark:bg-gray-600 rounded-full" 71 style="left: {{ sub $left 3 }}px; bottom: -3px; z-index: 0;"> 72 </div> 73{{ end }} 74 75{{ define "repoEvent" }} 76 {{ $root := index . 0 }} 77 {{ $event := index . 1 }} 78 {{ $repo := $event.Repo }} 79 {{ $source := $event.Source }} 80 {{ $userHandle := resolve $repo.Did }} 81 <div class="px-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex w-max items-center gap-2 text-sm"> 82 {{ template "user/fragments/picHandleLink" $repo.Did }} 83 {{ with $source }} 84 {{ $sourceDid := resolve .Did }} 85 forked 86 <a href="/{{ $sourceDid }}/{{ .Name }}"class="no-underline hover:underline"> 87 {{ $sourceDid }}/{{ .Name }} 88 </a> 89 to 90 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a> 91 {{ else }} 92 created 93 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline"> 94 {{ $repo.Name }} 95 </a> 96 {{ end }} 97 </div> 98{{ end }} 99 100{{ define "starEvent" }} 101 {{ $root := index . 0 }} 102 {{ $event := index . 1 }} 103 {{ $star := $event.RepoStar }} 104 {{ with $star }} 105 {{ $starrerHandle := resolve .Did }} 106 {{ $repoOwnerHandle := resolve .Repo.Did }} 107 <div class="px-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex w-max items-center gap-2 text-sm"> 108 {{ template "user/fragments/picHandleLink" $starrerHandle }} 109 starred 110 {{ template "user/fragments/pic" (list $repoOwnerHandle "size-6") }} 111 <a href="/{{ $repoOwnerHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline"> 112 {{ $repoOwnerHandle | truncateAt30 }}/{{ .Repo.Name }} 113 </a> 114 </div> 115 {{ end }} 116{{ end }} 117 118{{ define "followEvent" }} 119 {{ $root := index . 0 }} 120 {{ $event := index . 1 }} 121 {{ $follow := $event.Follow }} 122 {{ $profile := $event.Profile }} 123 {{ $followStats := $event.FollowStats }} 124 {{ $followStatus := $event.FollowStatus }} 125 126 {{ $userHandle := resolve $follow.UserDid }} 127 {{ $subjectHandle := resolve $follow.SubjectDid }} 128 <div class="px-6 py-2 bg-white dark:bg-gray-800 text-gray-600 dark:text-gray-300 flex w-max items-center gap-2 text-sm"> 129 {{ template "user/fragments/picHandleLink" $userHandle }} 130 followed 131 {{ template "user/fragments/picHandleLink" $subjectHandle }} 132 </div> 133{{ end }}