first commit

This commit is contained in:
2026-04-13 08:32:28 +02:00
commit 1074a91487
72 changed files with 4078 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
{% macro nav_icon(name) -%}
<span class="nav-icon">{{ icon_svg(name)|safe }}</span>
{%- endmacro %}
{% macro status_badge(task) -%}
<span class="status-badge status-badge--{{ task.status }}">{{ task.status_label }}</span>
{%- endmacro %}
{% macro avatar(user, size='') -%}
{% if user %}
{% if user.avatar_path and user.avatar_path.startswith('avatars/') %}
<img class="avatar {{ size }}" src="{{ url_for('main.uploads', filename=user.avatar_path) }}" alt="Avatar von {{ user.name }}">
{% else %}
<img class="avatar {{ size }}" src="{{ url_for('static', filename=user.display_avatar) }}" alt="Avatar von {{ user.name }}">
{% endif %}
{% endif %}
{%- endmacro %}
{% macro task_card(task, current_user, compact=false) -%}
<article class="task-card {% if compact %}task-card--compact{% endif %}">
<div class="task-card__top">
<div>
<div class="chip-row">
{{ status_badge(task) }}
<span class="point-pill">{{ task.points_awarded }} Punkte</span>
</div>
<h3>{{ task.title }}</h3>
</div>
<a class="icon-button" href="{{ url_for('tasks.edit', task_id=task.id) }}" aria-label="Aufgabe bearbeiten">
{{ nav_icon('gear') }}
</a>
</div>
{% if task.description %}
<p class="muted">{{ task.description }}</p>
{% endif %}
<dl class="task-meta">
<div>
<dt>Fällig</dt>
<dd>{{ task.due_date|date_de }}</dd>
</div>
<div>
<dt>Zuständig</dt>
<dd>{{ task.assigned_user.name if task.assigned_user else 'Unverteilt' }}</dd>
</div>
<div>
<dt>Rhythmus</dt>
<dd>{{ task.task_template.recurrence_label }}</dd>
</div>
{% if task.completed_at %}
<div>
<dt>Erledigt von</dt>
<dd>{{ task.completed_by_user.name if task.completed_by_user else '—' }}</dd>
</div>
{% endif %}
</dl>
<div class="task-card__footer">
<div class="task-assignee">
{{ avatar(task.assigned_user) }}
<span>{{ task.assigned_user.name if task.assigned_user else 'Ohne Person' }}</span>
</div>
{% if not task.completed_at %}
{% if task.assigned_user_id and task.assigned_user_id != current_user.id %}
<button
type="button"
class="button"
data-complete-action="{{ url_for('tasks.complete', task_id=task.id) }}"
data-complete-title="{{ task.title }}"
data-complete-assigned="{{ task.assigned_user.name if task.assigned_user else 'Zugewiesene Person' }}"
>
{{ nav_icon('check') }}
<span>Erledigen</span>
</button>
{% else %}
<form method="post" action="{{ url_for('tasks.complete', task_id=task.id) }}">
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}">
<input type="hidden" name="completed_for" value="me">
<button type="submit" class="button">
{{ nav_icon('check') }}
<span>Erledigen</span>
</button>
</form>
{% endif %}
{% else %}
<span class="done-hint">Am {{ task.completed_at|datetime_de }}</span>
{% endif %}
</div>
</article>
{%- endmacro %}