bifroest/app/templates/workspaces.html
2026-10-27 08:34:17 +01:00

79 lines
3.9 KiB
HTML

{% extends "base.html" %}
{% block title %}Workspaces{% endblock %}
{% block content %}
<div class="aiw-page-head">
<div class="flex-1 stack stack-sm">
<h1>Workspaces</h1>
<p class="text-sm text-muted">Ein Workspace verbindet freigegebene Repositories, Datenbanken und Dateien mit dem Chat.</p>
</div>
{% if can_create %}<a class="btn btn-primary" href="/workspaces/new">Workspace anlegen</a>{% endif %}
</div>
{% if trashed %}
<div class="alert alert-info" role="status"><div class="alert-content">
<p>Workspace „{{ trashed }}“ liegt im Papierkorb. Er lässt sich {{ trash_days }} Tage lang wiederherstellen.</p>
</div></div>
{% endif %}
{% if deleted %}
<div class="alert alert-success" role="status"><div class="alert-content">
<p>Workspace „{{ deleted }}“ endgültig gelöscht, mit Quellen, Chats, Freigabeanträgen und Uploads. Audit-Log und Verbrauch bleiben erhalten.</p>
{% if memory %}<p>Bitte in {{ memory }} das Projekt dieses Workspace und seinen Key löschen oder widerrufen; die Plattform hat den Key bereits entfernt.</p>{% endif %}
</div></div>
{% endif %}
{% if memberships %}
<div class="aiw-card-grid">
{% for m in memberships %}
{% set st = stats.get(m.workspace.id) %}
<a class="card card-hover aiw-ws-card" href="/workspaces/{{ m.workspace.id }}">
<div class="card-body stack stack-sm">
<div class="cluster">
<strong class="flex-1">{{ m.workspace.name }}</strong>
<span class="badge {{ 'badge-primary' if m.may_approve else 'badge-default' }}">{{ role_labels[m.role] }}</span>
</div>
<p class="text-sm text-muted">{{ teams.get(m.workspace.team_id, '') }}</p>
{% if m.workspace.description %}<p class="text-sm aiw-clamp">{{ m.workspace.description }}</p>{% endif %}
<p class="text-xs text-muted aiw-ws-meta">{{ st.chats }} Chat{{ 's' if st.chats != 1 }} · {{ st.sources }} Quelle{{ 'n' if st.sources != 1 }}{% if st.last %} · zuletzt aktiv {{ st.last.strftime('%d.%m.%Y') }}{% endif %}</p>
</div>
</a>
{% endfor %}
</div>
{% else %}
<div class="empty">
<p class="empty-title">Noch kein Workspace</p>
<p class="empty-description">Ein Workspace verbindet freigegebene Datenquellen mit dem Chat. Ohne Workspace gibt es keinen Chat.</p>
{% if can_create %}<a class="btn btn-primary" href="/workspaces/new">Workspace anlegen</a>{% endif %}
</div>
{% endif %}
{% if trash %}
<section class="card" id="trash">
<div class="card-header"><h2 class="text-lg">Papierkorb</h2></div>
<div class="card-body stack">
<p class="text-sm text-muted">Gelöschte Workspaces, in denen du Admin bist. Sie werden nach Ablauf der Frist automatisch endgültig gelöscht.</p>
<div class="table-wrap"><table>
<thead><tr><th>Workspace</th><th>Gelöscht</th><th>Endgültig gelöscht ab</th><th></th></tr></thead>
<tbody>
{% for t in trash %}
<tr>
<td>{{ t.workspace.name }}<p class="text-xs text-muted">{{ teams.get(t.workspace.team_id, '') }}</p></td>
<td class="text-sm">{{ t.workspace.deleted.strftime('%d.%m.%Y %H:%M') }}</td>
<td class="text-sm">{{ t.purge_at.strftime('%d.%m.%Y') }}</td>
<td><div class="cluster">
<form method="post" action="/workspaces/{{ t.workspace.id }}/restore">
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
<button class="btn btn-secondary btn-sm" type="submit">Wiederherstellen</button>
</form>
<form method="post" action="/workspaces/{{ t.workspace.id }}/purge" data-confirm="Workspace {{ t.workspace.name }} jetzt endgültig löschen? Das lässt sich nicht rückgängig machen.">
<input type="hidden" name="_csrf" value="{{ p.csrf }}">
<button class="btn btn-ghost btn-sm" type="submit">Endgültig löschen</button>
</form>
</div></td>
</tr>
{% endfor %}
</tbody>
</table></div>
</div>
</section>
{% endif %}
{% endblock %}