Monorepo for Tangled
tangled.org
1{{ define "title" }}{{ .Issue.Title }} · Issue #{{ .Issue.IssueId }} · {{ .RepoInfo.FullName }} · Tangled{{ end }}
2
3
4{{ define "extrameta" }}
5 {{ template "repo/issues/fragments/og" (dict "RepoInfo" .RepoInfo "Issue" .Issue) }}
6{{ end }}
7
8{{ define "repoContentLayout" }}
9 <div class="grid grid-cols-1 md:grid-cols-10 gap-4 w-full">
10 <div class="col-span-1 md:col-span-8">
11 <section class="bg-white dark:bg-gray-800 p-6 rounded relative w-full mx-auto dark:text-white">
12 {{ block "repoContent" . }}{{ end }}
13 </section>
14 {{ block "repoAfter" . }}{{ end }}
15 </div>
16 <div class="col-span-1 md:col-span-2 flex flex-col gap-6">
17 {{ template "repo/fragments/labelPanel"
18 (dict "RepoInfo" $.RepoInfo
19 "Defs" $.LabelDefs
20 "Subject" $.Issue.AtUri
21 "State" $.Issue.Labels) }}
22 {{ template "repo/fragments/participants" $.Issue.Participants }}
23 {{ template "repo/fragments/backlinks"
24 (dict "RepoInfo" $.RepoInfo
25 "Backlinks" $.Backlinks) }}
26 {{ template "repo/fragments/externalLinkPanel" $.Issue.AtUri }}
27 </div>
28 </div>
29{{ end }}
30
31{{ define "repoContent" }}
32<section id="issue-{{ .Issue.IssueId }}">
33 {{ template "issueHeader" .Issue }}
34 {{ template "issueInfo" . }}
35 {{ if .Issue.Body }}
36 <article id="body" class="mt-4 prose dark:prose-invert">{{ .Issue.Body | markdown }}</article>
37 {{ end }}
38 <div class="mt-4">
39 {{ $aturi := .Issue.AtUri }}
40 {{ template "repo/fragments/reactions"
41 (dict "Reactions" (index .Reactions $aturi)
42 "UserReacted" (index .UserReacted $aturi)
43 "ThreadAt" $aturi) }}
44 </div>
45</section>
46{{ end }}
47
48{{ define "issueHeader" }}
49 <header class="pb-2">
50 <h1 class="text-2xl">
51 {{ .Title | description }}
52 <span class="text-gray-500 dark:text-gray-400">#{{ .IssueId }}</span>
53 </h1>
54 </header>
55{{ end }}
56
57{{ define "issueInfo" }}
58 {{ $bgColor := "bg-gray-800 dark:bg-gray-700" }}
59 {{ $icon := "ban" }}
60 {{ if eq .Issue.State "open" }}
61 {{ $bgColor = "bg-green-600 dark:bg-green-700" }}
62 {{ $icon = "circle-dot" }}
63 {{ end }}
64 <div class="flex items-center gap-2">
65 <span class="inline-flex items-center rounded px-2 py-[5px] {{ $bgColor }}">
66 {{ i $icon "w-3 h-3 mr-1.5 text-white dark:text-white" }}
67 <span class="text-white dark:text-white text-sm">{{ if eq .Issue.State "open" }}Open{{ else }}Closed{{ end }}</span>
68 </span>
69
70 <span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1">
71 opened by
72 {{ template "user/fragments/picLink" (list .Issue.Did "size-6" (index .VouchRelationships (did .Issue.Did))) }}
73 <a href="/{{ resolve .Issue.Did }}">{{ resolve .Issue.Did }}</a>
74 <span class="select-none before:content-['\00B7']"></span>
75 {{ if .Issue.Edited }}
76 edited {{ template "repo/fragments/time" .Issue.Edited }}
77 {{ else }}
78 {{ template "repo/fragments/time" .Issue.Created }}
79 {{ end }}
80 </span>
81
82 {{ if and .LoggedInUser (eq .LoggedInUser.Did .Issue.Did) }}
83 <div class="ml-auto flex items-center gap-2">
84 {{ template "issueActions" . }}
85 </div>
86 {{ end }}
87 </div>
88 <div id="issue-actions-error" class="error"></div>
89{{ end }}
90
91{{ define "issueActions" }}
92 {{ template "editIssue" . }}
93 {{ template "deleteIssue" . }}
94{{ end }}
95
96{{ define "editIssue" }}
97 <a
98 class="text-gray-500 dark:text-gray-400 flex gap-1 items-center group cursor-pointer"
99 hx-get="/{{ .RepoInfo.FullName }}/issues/{{ .Issue.IssueId }}/edit"
100 hx-swap="innerHTML"
101 hx-target="#issue-{{.Issue.IssueId}}">
102 {{ i "pencil" "size-3" }}
103 </a>
104{{ end }}
105
106{{ define "deleteIssue" }}
107 <a
108 class="text-red-500 dark:text-red-400 hover:text-red-600 hover:dark:text-red-300 flex gap-1 items-center group cursor-pointer"
109 hx-delete="/{{ .RepoInfo.FullName }}/issues/{{ .Issue.IssueId }}/"
110 hx-confirm="Are you sure you want to delete your issue?"
111 hx-swap="none">
112 {{ i "trash-2" "size-3 inline group-[.htmx-request]:hidden" }}
113 {{ i "loader-circle" "size-3 animate-spin hidden group-[.htmx-request]:inline" }}
114 </a>
115{{ end }}
116
117{{ define "repoAfter" }}
118 <div class="flex flex-col gap-4 mt-4">
119 {{
120 template "fragments/comment/commentList"
121 (dict
122 "LoggedInUser" $.LoggedInUser
123 "Reactions" $.Reactions
124 "UserReacted" $.UserReacted
125 "VouchRelationships" $.VouchRelationships
126 "CommentList" $.CommentList)
127 }}
128
129 {{ template "repo/issues/fragments/newComment" . }}
130 </div>
131{{ end }}