first commit
This commit is contained in:
92
app/templates/partials/macros.html
Normal file
92
app/templates/partials/macros.html
Normal 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 %}
|
||||
Reference in New Issue
Block a user