this repo has no description
1{{ define "title" }}settings{{ end }}
2
3{{ define "content" }}
4 <div class="p-6">
5 <p class="text-xl font-bold dark:text-white">Settings</p>
6 </div>
7 <div class="flex flex-col">
8 {{ block "profile" . }}{{ end }}
9 {{ block "keys" . }}{{ end }}
10 {{ block "emails" . }}{{ end }}
11 </div>
12{{ end }}
13
14{{ define "profile" }}
15 <h2 class="text-sm font-bold py-2 px-6 uppercase dark:text-gray-300">
16 profile
17 </h2>
18 <section
19 class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-6 py-4 mb-6 w-full lg:w-fit">
20 <dl class="grid grid-cols-[auto_1fr] gap-x-4 dark:text-gray-200">
21 {{ if .LoggedInUser.Handle }}
22 <dt class="font-bold">handle</dt>
23 <dd>@{{ .LoggedInUser.Handle }}</dd>
24 {{ end }}
25 <dt class="font-bold">did</dt>
26 <dd>{{ .LoggedInUser.Did }}</dd>
27 <dt class="font-bold">pds</dt>
28 <dd>{{ .LoggedInUser.Pds }}</dd>
29 </dl>
30 </section>
31{{ end }}
32
33{{ define "keys" }}
34 <h2 class="text-sm font-bold py-2 px-6 uppercase dark:text-gray-300">
35 ssh keys
36 </h2>
37 <section
38 class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-6 py-4 mb-6 w-full lg:w-fit">
39 <p class="mb-8 dark:text-gray-300">
40 SSH public keys added here will be broadcasted to knots that you are a
41 member of,
42 <br />
43 allowing you to push to repositories there.
44 </p>
45 <div id="key-list" class="flex flex-col gap-6 mb-8">
46 {{ range $index, $key := .PubKeys }}
47 <div class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-4">
48 <div class="flex flex-col gap-1">
49 <div class="inline-flex items-center gap-4">
50 {{ i "key" "w-3 h-3 dark:text-gray-300" }}
51 <p class="font-bold dark:text-white">{{ .Name }}</p>
52 </div>
53 <p class="text-sm text-gray-500 dark:text-gray-400">
54 added
55 {{ template "repo/fragments/time" .Created }}
56 </p>
57 <div class="overflow-x-auto whitespace-nowrap flex-1 max-w-full">
58 <code class="text-sm text-gray-500 dark:text-gray-400">
59 {{ .Key }}
60 </code>
61 </div>
62 </div>
63 <button
64 class="btn text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 gap-2 group"
65 title="Delete key"
66 hx-delete="/settings/keys?name={{ urlquery .Name }}&rkey={{ urlquery .Rkey }}&key={{ urlquery .Key }}"
67 hx-confirm="Are you sure you want to delete the key '{{ .Name }}'?">
68 {{ i "trash-2" "w-5 h-5" }}
69 <span class="hidden md:inline">delete</span>
70 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
71 </button>
72 </div>
73 {{ end }}
74 </div>
75 <form
76 hx-put="/settings/keys"
77 hx-indicator="#add-sshkey-spinner"
78 hx-swap="none"
79 class="max-w-2xl mb-8 space-y-4">
80 <input
81 type="text"
82 id="name"
83 name="name"
84 placeholder="key name"
85 required
86 class="w-full dark:bg-gray-700 dark:text-white dark:border-gray-600 dark:placeholder-gray-400" />
87
88 <input
89 id="key"
90 name="key"
91 placeholder="ssh-rsa AAAAAA..."
92 required
93 class="w-full dark:bg-gray-700 dark:text-white dark:border-gray-600 dark:placeholder-gray-400" />
94
95 <button
96 class="btn dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600 flex gap-2 items-center"
97 type="submit">
98 <span>add key</span>
99 <span id="add-sshkey-spinner" class="group">
100 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
101 </span>
102 </button>
103
104 <div id="settings-keys" class="error dark:text-red-400"></div>
105 </form>
106 </section>
107{{ end }}
108
109{{ define "emails" }}
110 <h2 class="text-sm font-bold py-2 px-6 uppercase dark:text-gray-300">
111 email addresses
112 </h2>
113 <section
114 class="rounded bg-white dark:bg-gray-800 drop-shadow-sm px-6 py-4 mb-6 w-full lg:w-fit">
115 <p class="mb-8 dark:text-gray-300">
116 Commits authored using emails listed here will be associated with your
117 Tangled profile.
118 </p>
119 <div id="email-list" class="flex flex-col gap-6 mb-8">
120 {{ range $index, $email := .Emails }}
121 <div class="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-4">
122 <div class="flex flex-col gap-2">
123 <div class="inline-flex items-center gap-4">
124 {{ i "mail" "w-3 h-3 dark:text-gray-300" }}
125 <p class="font-bold dark:text-white">{{ .Address }}</p>
126 <div class="inline-flex items-center gap-1">
127 {{ if .Verified }}
128 <span
129 class="text-xs bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200 px-2 py-1 rounded">
130 verified
131 </span>
132 {{ else }}
133 <span
134 class="text-xs bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 px-2 py-1 rounded">
135 unverified
136 </span>
137 {{ end }}
138 {{ if .Primary }}
139 <span
140 class="text-xs bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-2 py-1 rounded">
141 primary
142 </span>
143 {{ end }}
144 </div>
145 </div>
146 <p class="text-sm text-gray-500 dark:text-gray-400">
147 added
148 {{ template "repo/fragments/time" .CreatedAt }}
149 </p>
150 </div>
151 <div class="flex gap-2 items-center">
152 {{ if not .Verified }}
153 <button
154 class="btn flex gap-2 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
155 hx-post="/settings/emails/verify/resend"
156 hx-swap="none"
157 href="#"
158 hx-vals='{"email": "{{ .Address }}"}'>
159 {{ i "rotate-cw" "w-5 h-5" }}
160 <span class="hidden md:inline">resend</span>
161 </button>
162 {{ end }}
163 {{ if and (not .Primary) .Verified }}
164 <a
165 class="text-sm dark:text-blue-400 dark:hover:text-blue-300"
166 hx-post="/settings/emails/primary"
167 hx-swap="none"
168 href="#"
169 hx-vals='{"email": "{{ .Address }}"}'>
170 set as primary
171 </a>
172 {{ end }}
173 {{ if not .Primary }}
174 <form
175 hx-delete="/settings/emails"
176 hx-confirm="Are you sure you wish to delete the email '{{ .Address }}'?"
177 hx-indicator="#delete-email-{{ $index }}-spinner">
178 <input type="hidden" name="email" value="{{ .Address }}" />
179 <button
180 class="btn text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 flex gap-2 items-center"
181 title="Delete email"
182 type="submit">
183 {{ i "trash-2" "w-5 h-5" }}
184 <span class="hidden md:inline">delete</span>
185 <span id="delete-email-{{ $index }}-spinner" class="group">
186 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
187 </span>
188 </button>
189 </form>
190 {{ end }}
191 </div>
192 </div>
193 {{ end }}
194 </div>
195 <form
196 hx-put="/settings/emails"
197 hx-swap="none"
198 class="max-w-2xl mb-8 space-y-4"
199 hx-indicator="#add-email-spinner">
200 <input
201 type="email"
202 id="email"
203 name="email"
204 placeholder="your@email.com"
205 required
206 class="w-full dark:bg-gray-700 dark:text-white dark:border-gray-600 dark:placeholder-gray-400" />
207
208 <button
209 class="btn dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600 flex gap-2 items-center"
210 type="submit">
211 <span>add email</span>
212 <span id="add-email-spinner" class="group">
213 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
214 </span>
215 </button>
216
217 <div id="settings-emails-error" class="error dark:text-red-400"></div>
218 <div
219 id="settings-emails-success"
220 class="success dark:text-green-400"></div>
221 </form>
222 </section>
223{{ end }}