92 lines
5.5 KiB
HTML
92 lines
5.5 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
<meta name="theme-color" content="#f4efe6">
|
|
<title>{% block title %}{{ app_name }}{% endblock %}</title>
|
|
<link rel="manifest" href="{{ url_for('static', filename='manifest.json') }}">
|
|
<link rel="stylesheet" href="{{ url_for('static', filename='css/app.css') }}">
|
|
<script defer src="https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.min.js"></script>
|
|
<script defer src="https://unpkg.com/htmx.org@2.0.4"></script>
|
|
<script defer src="{{ url_for('static', filename='js/app.js') }}"></script>
|
|
{% block head %}{% endblock %}
|
|
</head>
|
|
{% from "_ui.html" import avatar %}
|
|
<body data-vapid-public-key="{{ vapid_public_key }}" data-theme="light" data-csrf-token="{{ csrf_token }}">
|
|
<div class="app-shell">
|
|
{% if current_user.is_authenticated %}
|
|
<aside class="sidebar">
|
|
<a class="brand" href="{{ url_for('main.index') }}">
|
|
<span class="brand-mark">S</span>
|
|
<span>
|
|
<strong>Saldo</strong>
|
|
<small>Haushalt gemeinsam planen</small>
|
|
</span>
|
|
</a>
|
|
<nav class="nav-group">
|
|
<a href="{{ url_for('main.index') }}" class="nav-link"><img src="{{ url_for('static', filename='icons/house.svg') }}" alt="" class="ui-icon">Übersicht</a>
|
|
<a href="{{ url_for('planning.current') }}" class="nav-link"><img src="{{ url_for('static', filename='icons/wallet.svg') }}" alt="" class="ui-icon">Planung</a>
|
|
<a href="{{ url_for('months.index') }}" class="nav-link"><img src="{{ url_for('static', filename='icons/calendar.svg') }}" alt="" class="ui-icon">Monate</a>
|
|
<a href="{{ url_for('main.analytics') }}" class="nav-link"><img src="{{ url_for('static', filename='icons/chart-simple.svg') }}" alt="" class="ui-icon">Auswertungen</a>
|
|
{% if current_user.is_admin() %}
|
|
<a href="{{ url_for('admin.index') }}" class="nav-link"><img src="{{ url_for('static', filename='icons/sliders.svg') }}" alt="" class="ui-icon">Optionen</a>
|
|
{% endif %}
|
|
</nav>
|
|
<div class="sidebar-footer">
|
|
<div class="sidebar-user">
|
|
{{ avatar(current_user.ui_name, current_user.avatar_url, current_user.avatar_initials, 'md') }}
|
|
<div>
|
|
<strong>{{ current_user.ui_name }}</strong>
|
|
<small>{{ "Admin" if current_user.is_admin() else "Mitglied" }}</small>
|
|
</div>
|
|
</div>
|
|
<button class="ghost-button theme-toggle" type="button" data-theme-toggle>
|
|
<img src="{{ url_for('static', filename='icons/moon.svg') }}" alt="" class="ui-icon theme-icon-dark">
|
|
<img src="{{ url_for('static', filename='icons/sun.svg') }}" alt="" class="ui-icon theme-icon-light">
|
|
Design
|
|
</button>
|
|
<form method="post" action="{{ url_for('auth.logout') }}">
|
|
<button class="ghost-button" type="submit"><img src="{{ url_for('static', filename='icons/arrow-right-to-bracket.svg') }}" alt="" class="ui-icon">Abmelden</button>
|
|
</form>
|
|
</div>
|
|
</aside>
|
|
{% endif %}
|
|
<main class="content">
|
|
{% if current_user.is_authenticated %}
|
|
<div class="content-toolbar">
|
|
<button class="ghost-button theme-toggle mobile-theme-toggle" type="button" data-theme-toggle>
|
|
<img src="{{ url_for('static', filename='icons/moon.svg') }}" alt="" class="ui-icon theme-icon-dark">
|
|
<img src="{{ url_for('static', filename='icons/sun.svg') }}" alt="" class="ui-icon theme-icon-light">
|
|
Dark Mode
|
|
</button>
|
|
</div>
|
|
{% endif %}
|
|
{% with messages = get_flashed_messages(with_categories=true) %}
|
|
{% if messages %}
|
|
<div class="flash-stack">
|
|
{% for category, message in messages %}
|
|
<div class="flash flash-{{ category }}">{{ message }}</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
{% endwith %}
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
</div>
|
|
{% if current_user.is_authenticated %}
|
|
<nav class="bottom-nav">
|
|
<a href="{{ url_for('main.index') }}" aria-label="Übersicht" title="Übersicht"><img src="{{ url_for('static', filename='icons/house.svg') }}" alt="" class="ui-icon"><span>Übersicht</span></a>
|
|
<a href="{{ url_for('planning.current') }}" aria-label="Planung" title="Planung"><img src="{{ url_for('static', filename='icons/wallet.svg') }}" alt="" class="ui-icon"><span>Planung</span></a>
|
|
<a href="{{ url_for('months.index') }}" aria-label="Monate" title="Monate"><img src="{{ url_for('static', filename='icons/calendar.svg') }}" alt="" class="ui-icon"><span>Monate</span></a>
|
|
<a href="{{ url_for('main.analytics') }}" aria-label="Auswertungen" title="Auswertungen"><img src="{{ url_for('static', filename='icons/chart-simple.svg') }}" alt="" class="ui-icon"><span>Auswertungen</span></a>
|
|
{% if current_user.is_admin() %}
|
|
<a href="{{ url_for('admin.index') }}" aria-label="Optionen" title="Optionen"><img src="{{ url_for('static', filename='icons/sliders.svg') }}" alt="" class="ui-icon"><span>Optionen</span></a>
|
|
{% else %}
|
|
<a href="#" data-enable-push aria-label="Push" title="Push"><img src="{{ url_for('static', filename='icons/bell.svg') }}" alt="" class="ui-icon"><span>Push</span></a>
|
|
{% endif %}
|
|
</nav>
|
|
{% endif %}
|
|
</body>
|
|
</html>
|