feat: polish mobile ui and admin quick task settings
This commit is contained in:
@@ -3,7 +3,9 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||||
<meta name="theme-color" content="#f5f7ff">
|
||||
<meta name="theme-color" media="(prefers-color-scheme: light)" content="#f5f7ff">
|
||||
<meta name="theme-color" media="(prefers-color-scheme: dark)" content="#101826">
|
||||
<meta name="color-scheme" content="light dark">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||
<meta name="apple-mobile-web-app-title" content="{{ app_name }}">
|
||||
@@ -12,7 +14,7 @@
|
||||
<link rel="manifest" href="{{ url_for('main.manifest') }}">
|
||||
<link rel="icon" type="image/svg+xml" href="{{ url_for('static', filename='images/favicon.svg') }}">
|
||||
<link rel="apple-touch-icon" href="{{ url_for('static', filename='images/apple-touch-icon.png') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css', v=asset_version('css/style.css')) }}">
|
||||
</head>
|
||||
<body data-push-key="{{ config['VAPID_PUBLIC_KEY'] if current_user.is_authenticated else '' }}">
|
||||
{% from "partials/macros.html" import nav_icon %}
|
||||
@@ -89,7 +91,7 @@
|
||||
|
||||
{% if current_user.is_authenticated %}
|
||||
<nav class="bottom-nav" aria-label="Mobile Navigation">
|
||||
{% for endpoint, label, icon in nav_items %}
|
||||
{% for endpoint, label, icon in mobile_nav_items %}
|
||||
<a href="{{ url_for(endpoint) }}" class="bottom-nav__item {% if request.endpoint == endpoint %}is-active{% endif %}">
|
||||
{{ nav_icon(icon) }}
|
||||
<span>{{ label }}</span>
|
||||
@@ -142,6 +144,6 @@
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
<script src="{{ url_for('static', filename='js/app.js') }}" defer></script>
|
||||
<script src="{{ url_for('static', filename='js/app.js', v=asset_version('js/app.js')) }}" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -166,48 +166,64 @@
|
||||
|
||||
<section class="panel">
|
||||
<p class="eyebrow">Admin</p>
|
||||
<h2>Schnellaufgabe-Punkte</h2>
|
||||
<p class="muted">Diese Werte erscheinen direkt im Schnellaufgaben-Dialog hinter den Aufwand-Stufen.</p>
|
||||
<h2>Schnellaufgabe-Aufwand</h2>
|
||||
<p class="muted">Hier definierst du die sichtbaren Aufwand-Stufen und die dazugehörigen Punkte. Im Schnellaufgaben-Dialog wird nur die Bezeichnung angezeigt.</p>
|
||||
<form method="post" action="{{ url_for('settings.update_quick_task_config') }}" class="badge-settings">
|
||||
{{ quick_task_config_form.hidden_tag() }}
|
||||
<div class="badge-setting-card">
|
||||
<div>
|
||||
<strong>Schnell</strong>
|
||||
<strong>Slot 1</strong>
|
||||
<p class="muted">Kleine Sache für zwischendurch.</p>
|
||||
</div>
|
||||
<div class="field">
|
||||
{{ quick_task_config_form.fast_points.label }}
|
||||
{{ quick_task_config_form.fast_points(value=quick_task_config['fast']['points']) }}
|
||||
{{ quick_task_config_form.fast_label.label }}
|
||||
{{ quick_task_config_form.fast_label() }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="{{ quick_task_config_form.fast_points.id }}">Punkte</label>
|
||||
{{ quick_task_config_form.fast_points() }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge-setting-card">
|
||||
<div>
|
||||
<strong>Normal</strong>
|
||||
<strong>Slot 2</strong>
|
||||
<p class="muted">Typische Alltagssache.</p>
|
||||
</div>
|
||||
<div class="field">
|
||||
{{ quick_task_config_form.normal_points.label }}
|
||||
{{ quick_task_config_form.normal_points(value=quick_task_config['normal']['points']) }}
|
||||
{{ quick_task_config_form.normal_label.label }}
|
||||
{{ quick_task_config_form.normal_label() }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="{{ quick_task_config_form.normal_points.id }}">Punkte</label>
|
||||
{{ quick_task_config_form.normal_points() }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge-setting-card">
|
||||
<div>
|
||||
<strong>Dauert etwas</strong>
|
||||
<strong>Slot 3</strong>
|
||||
<p class="muted">Braucht etwas mehr Zeit oder Konzentration.</p>
|
||||
</div>
|
||||
<div class="field">
|
||||
{{ quick_task_config_form.medium_points.label }}
|
||||
{{ quick_task_config_form.medium_points(value=quick_task_config['medium']['points']) }}
|
||||
{{ quick_task_config_form.medium_label.label }}
|
||||
{{ quick_task_config_form.medium_label() }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="{{ quick_task_config_form.medium_points.id }}">Punkte</label>
|
||||
{{ quick_task_config_form.medium_points() }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="badge-setting-card">
|
||||
<div>
|
||||
<strong>Aufwendig</strong>
|
||||
<strong>Slot 4</strong>
|
||||
<p class="muted">Spürbarer Aufwand mit mehr Punkten.</p>
|
||||
</div>
|
||||
<div class="field">
|
||||
{{ quick_task_config_form.heavy_points.label }}
|
||||
{{ quick_task_config_form.heavy_points(value=quick_task_config['heavy']['points']) }}
|
||||
{{ quick_task_config_form.heavy_label.label }}
|
||||
{{ quick_task_config_form.heavy_label() }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label for="{{ quick_task_config_form.heavy_points.id }}">Punkte</label>
|
||||
{{ quick_task_config_form.heavy_points() }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="field field--full">
|
||||
|
||||
@@ -3,7 +3,36 @@
|
||||
{% block title %}Kalender · Putzliga{% endblock %}
|
||||
{% block page_title %}Kalender & Liste{% endblock %}
|
||||
{% block content %}
|
||||
<section class="panel panel--toolbar">
|
||||
<section class="panel calendar-toolbar-mobile">
|
||||
<div class="calendar-toolbar-mobile__header">
|
||||
<div>
|
||||
<p class="eyebrow">Monatsansicht</p>
|
||||
<h2>{{ current_label }}</h2>
|
||||
</div>
|
||||
<div class="calendar-toolbar-mobile__arrows">
|
||||
<a
|
||||
class="icon-button calendar-nav-button"
|
||||
href="{{ url_for('tasks.calendar_view', year=current_year if current_month > 1 else current_year - 1, month=current_month - 1 if current_month > 1 else 12, view=view) }}"
|
||||
aria-label="Vorheriger Monat"
|
||||
>
|
||||
<span aria-hidden="true">‹</span>
|
||||
</a>
|
||||
<a
|
||||
class="icon-button calendar-nav-button"
|
||||
href="{{ url_for('tasks.calendar_view', year=current_year if current_month < 12 else current_year + 1, month=current_month + 1 if current_month < 12 else 1, view=view) }}"
|
||||
aria-label="Nächster Monat"
|
||||
>
|
||||
<span aria-hidden="true">›</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="segmented calendar-toolbar-mobile__switch">
|
||||
<a href="{{ url_for('tasks.calendar_view', year=current_year, month=current_month, view='calendar') }}" class="{% if view == 'calendar' %}is-active{% endif %}">Kalender</a>
|
||||
<a href="{{ url_for('tasks.calendar_view', year=current_year, month=current_month, view='list') }}" class="{% if view == 'list' %}is-active{% endif %}">Liste</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="panel panel--toolbar calendar-toolbar-desktop">
|
||||
<div>
|
||||
<p class="eyebrow">Monatsansicht</p>
|
||||
<h2>{{ current_label }}</h2>
|
||||
@@ -19,6 +48,48 @@
|
||||
</section>
|
||||
|
||||
{% if view == 'calendar' %}
|
||||
{% if mobile_day_groups %}
|
||||
<section class="panel calendar-mobile-strip">
|
||||
<div class="calendar-mobile-strip__scroller">
|
||||
{% for group in mobile_day_groups %}
|
||||
<a href="#day-{{ group.day }}" class="calendar-mobile-pill {% if loop.first %}is-active{% endif %}">
|
||||
<strong>{{ group.day }}.</strong>
|
||||
<small>{{ group.tasks|length }} Aufgabe{% if group.tasks|length != 1 %}n{% endif %}</small>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
<section class="calendar-mobile-list">
|
||||
{% for group in mobile_day_groups %}
|
||||
<article class="panel calendar-mobile-day" id="day-{{ group.day }}">
|
||||
<div class="calendar-mobile-day__header">
|
||||
<strong>{{ group.day }}. {{ current_month|month_name }}</strong>
|
||||
<span>{{ group.tasks|length }} Aufgabe{% if group.tasks|length != 1 %}n{% endif %}</span>
|
||||
</div>
|
||||
<div class="calendar-mobile-day__tasks">
|
||||
{% for task in group.tasks %}
|
||||
<a href="{{ url_for('tasks.edit', task_id=task.id) }}" class="calendar-task calendar-task--{{ task.status }}">
|
||||
<strong class="calendar-task__title">{{ task.title }}</strong>
|
||||
<small class="calendar-task__person">
|
||||
{% if task.completed_by_user %}
|
||||
{{ task.completed_by_user.name }}
|
||||
{% elif task.assigned_user %}
|
||||
{{ task.assigned_user.name }}
|
||||
{% else %}
|
||||
Ohne Zuweisung
|
||||
{% endif %}
|
||||
</small>
|
||||
</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</article>
|
||||
{% else %}
|
||||
<div class="empty-state">In diesem Monat sind noch keine Aufgaben hinterlegt.</div>
|
||||
{% endfor %}
|
||||
</section>
|
||||
|
||||
<section class="calendar-grid">
|
||||
<div class="calendar-grid__weekdays">
|
||||
{% for label in ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So'] %}
|
||||
@@ -36,9 +107,9 @@
|
||||
<strong class="calendar-task__title">{{ task.title }}</strong>
|
||||
<small class="calendar-task__person">
|
||||
{% if task.completed_by_user %}
|
||||
Erledigt: {{ task.completed_by_user.name }}
|
||||
{{ task.completed_by_user.name }}
|
||||
{% elif task.assigned_user %}
|
||||
Zuständig: {{ task.assigned_user.name }}
|
||||
{{ task.assigned_user.name }}
|
||||
{% else %}
|
||||
Ohne Zuweisung
|
||||
{% endif %}
|
||||
|
||||
Reference in New Issue
Block a user