feat: add account and card lifecycle controls
Test and publish / verify (push) Successful in 2m31s

This commit is contained in:
2026-07-29 12:50:13 +03:30
parent eba6b3565c
commit 71d253fb03
6 changed files with 502 additions and 33 deletions
+43 -5
View File
@@ -95,13 +95,19 @@
<button class="text-button task-move-button" type="submit">Move</button>
</form>
{{if or (eq .CreatorID $.User.ID) (eq $.User.Role "admin")}}
<details class="task-remove">
<summary>Remove</summary>
<form method="post" action="/board/tasks/{{.ID}}/delete">
<div class="task-lifecycle-actions">
<form method="post" action="/board/tasks/{{.ID}}/archive">
<input type="hidden" name="csrf" value="{{$.CSRF}}">
<button class="text-button" type="submit">Confirm</button>
<button class="text-button archive-task" type="submit">Archive</button>
</form>
</details>
<details class="task-remove">
<summary>Delete</summary>
<form method="post" action="/board/tasks/{{.ID}}/delete">
<input type="hidden" name="csrf" value="{{$.CSRF}}">
<button class="text-button" type="submit">Delete permanently</button>
</form>
</details>
</div>
{{end}}
</div>
</article>
@@ -111,6 +117,38 @@
</section>
{{end}}
</div>
{{if .ArchivedTasks}}
<details class="archived-cards-panel">
<summary>Archived cards <span>{{len .ArchivedTasks}}</span></summary>
<div class="archived-card-list">
{{range .ArchivedTasks}}
<article class="archived-card">
<div>
{{if .Tags}}<div class="card-tags">{{range .Tags}}<span class="board-tag {{.Color}}">{{.Name}}</span>{{end}}</div>{{end}}
<span class="task-id">#{{.ID}} · {{.Status}}</span>
<h3>{{.Title}}</h3>
<small>Originally created by {{.CreatorName}}</small>
</div>
{{if or (eq .CreatorID $.User.ID) (eq $.User.Role "admin")}}
<div class="archived-card-actions">
<form method="post" action="/board/tasks/{{.ID}}/restore">
<input type="hidden" name="csrf" value="{{$.CSRF}}">
<button class="button secondary" type="submit">Restore</button>
</form>
<details class="archived-delete">
<summary class="text-button">Delete</summary>
<form method="post" action="/board/tasks/{{.ID}}/delete">
<input type="hidden" name="csrf" value="{{$.CSRF}}">
<button class="text-button" type="submit">Delete permanently</button>
</form>
</details>
</div>
{{end}}
</article>
{{end}}
</div>
</details>
{{end}}
<script src="/static/board.js" defer></script>
{{template "shell-end" .}}
{{end}}
+20 -2
View File
@@ -24,11 +24,29 @@
<section class="card">
<header class="section-head"><div><p class="eyebrow">DIRECTORY</p><h2>{{len .Users}} teammates</h2></div></header>
<div class="user-list">
{{$current := .User}}
{{range .Users}}
<div class="user-row">
<div class="user-row {{if not .Active}}inactive{{end}}">
<span class="avatar">{{initial .DisplayName}}</span>
<div><strong>{{.DisplayName}}</strong><small>@{{.Username}}{{if .Email}} · {{.Email}}{{end}}</small></div>
<span class="badge {{if eq .Role "admin"}}approved{{else}}kind{{end}}">{{.Role}}</span>
<div class="user-badges">
<span class="badge {{if eq .Role "admin"}}approved{{else}}kind{{end}}">{{.Role}}</span>
{{if not .Active}}<span class="badge locked">Locked</span>{{end}}
</div>
{{if eq .ID $current.ID}}
<small class="current-account">Current account</small>
{{else}}
<form method="post" action="/admin/users/{{.ID}}/status" class="account-status-form">
<input type="hidden" name="csrf" value="{{$.CSRF}}">
{{if .Active}}
<input type="hidden" name="action" value="lock">
<button class="text-button lock-account" type="submit">Lock</button>
{{else}}
<input type="hidden" name="action" value="unlock">
<button class="text-button unlock-account" type="submit">Unlock</button>
{{end}}
</form>
{{end}}
</div>
{{end}}
</div>