1. Refresh button no longer doubles header - Added ?fragment=1 param to filter/refresh HTMX requests - Board route returns board_fragment.html (columns only) for fragment requests - Refresh button uses window.location.reload() for full page reload 2. No more raw JSON in header - base.html: user info rendered server-side via template variable - board.py: decodes session cookie, passes user to template - Dashboard/board templates show Login/Deconnexion based on auth state 3. New issue form works - Replaced HTMX post with JS fetch (handleNewIssue) - Adds CSRF token to form submission - Reloads page on successful creation - Cleaner error handling
53 lines
1.7 KiB
HTML
53 lines
1.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr" data-theme="dark">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>FlowDeck</title>
|
|
<link rel="stylesheet" href="/static/css/app.css">
|
|
<script src="https://unpkg.com/[email protected]" defer></script>
|
|
<script src="https://unpkg.com/[email protected]" defer></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/[email protected]/Sortable.min.js" defer></script>
|
|
</head>
|
|
<body>
|
|
<header class="app-header">
|
|
<div class="header-left">
|
|
<a href="/" class="logo">
|
|
<span class="logo-icon">▦</span>
|
|
<span class="logo-text">FlowDeck</span>
|
|
</a>
|
|
</div>
|
|
<div class="header-right">
|
|
{% if user %}
|
|
<span id="user-info">
|
|
{% if user.avatar_url %}<img src="{{ user.avatar_url }}" width="20" height="20" class="avatar">{% endif %}
|
|
{{ user.login }}
|
|
<a href="/auth/logout" class="btn btn-sm">Déconnexion</a>
|
|
</span>
|
|
{% else %}
|
|
<span id="user-info">
|
|
<a href="/auth/login" class="btn btn-sm">🔑 Login</a>
|
|
</span>
|
|
{% endif %}
|
|
<button class="theme-toggle" onclick="toggleTheme()" title="Thème clair/sombre">🌓</button>
|
|
</div>
|
|
</header>
|
|
<main class="main-content">
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
|
|
<div id="card-modal" class="modal-overlay" style="display:none">
|
|
<div class="modal-container">
|
|
<div class="modal-header">
|
|
<h3 id="card-modal-title">Détail</h3>
|
|
<button onclick="closeModal()" class="modal-close">×</button>
|
|
</div>
|
|
<div id="card-modal-content" class="modal-body"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="/static/js/app.js" defer></script>
|
|
{% block scripts %}{% endblock %}
|
|
</body>
|
|
</html>
|