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