Files
teatracker/index.html
Vibe Nuage Agent 3f228b6007 Version 4.0: Lokale Dateispeicherung im data/-Verzeichnis, Nextcloud-Integration entfernt
- NextcloudStorage-Klasse durch LocalFileStorage ersetzt
- Daten werden im data/-Verzeichnis gespeichert (falls lokaler Server läuft)
- Automatischer Fallback auf localStorage falls Dateispeicherung nicht verfügbar
- Nextcloud-Einstellungen aus UI entfernt
- README.md aktualisiert mit neuer Speicherbeschreibung
- Export/Import-Funktionen behalten für Datensicherung

Co-authored-by: trevor1969 <trevor1969@users.noreply.github.com>
2026-06-05 21:20:32 +00:00

381 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TeeTracker - Dein Tee-Konsum Tracker</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="app-container">
<header>
<h1>🍵 TeeTracker</h1>
<p>Verwalte deine Tee-Sorten und tracke deinen Konsum</p>
</header>
<nav class="tabs">
<button class="tab-button active" data-tab="dashboard">Dashboard</button>
<button class="tab-button" data-tab="teas">Tee-Sorten</button>
<button class="tab-button" data-tab="track">Tracken</button>
<button class="tab-button" data-tab="stats">Statistiken</button>
<button class="tab-button" data-tab="settings">⚙️ Einstellungen</button>
</nav>
<main class="tab-content">
<!-- Dashboard Tab -->
<section id="dashboard" class="tab-pane active">
<div class="dashboard-cards">
<div class="card">
<h3>Gesamt getrunken</h3>
<div class="card-value" id="total-cups">0 Tassen</div>
</div>
<div class="card">
<h3>Heute</h3>
<div class="card-value" id="today-cups">0 Tassen</div>
</div>
<div class="card">
<h3>Diese Woche</h3>
<div class="card-value" id="week-cups">0 Tassen</div>
</div>
<div class="card">
<h3>Tee-Sorten</h3>
<div class="card-value" id="total-teas">0 Sorten</div>
</div>
</div>
<!-- Tea Timer -->
<div class="timer-section">
<h3>⏱️ Tee-Timer</h3>
<div class="timer-controls">
<div class="timer-display" id="timer-display">03:00</div>
<div class="timer-input-group">
<button id="timer-decrease" class="timer-btn">-</button>
<input type="number" id="timer-input" min="1" max="15" value="3" class="timer-input">
<button id="timer-increase" class="timer-btn">+</button>
<span class="timer-unit">Minuten</span>
</div>
<div class="timer-actions">
<button id="timer-start" class="btn btn-primary">Start</button>
<button id="timer-pause" class="btn btn-secondary" disabled>Pause</button>
<button id="timer-reset" class="btn btn-secondary">Reset</button>
</div>
</div>
<div id="timer-notification" class="timer-notification" style="display: none;"></div>
</div>
<div class="recent-activity">
<h3>Letzte Aktivitäten</h3>
<div id="recent-entries" class="activity-list"></div>
</div>
</section>
<!-- Tee-Sorten Tab -->
<section id="teas" class="tab-pane">
<div class="teas-header">
<h2>Tee-Sorten</h2>
<button id="add-tea-btn" class="btn btn-primary"> Tee hinzufügen</button>
</div>
<div class="tea-filters">
<input type="text" id="tea-search" placeholder="Suche nach Tee-Sorten...">
<select id="tea-type-filter">
<option value="all">Alle Typen</option>
<option value="Schwarztee">Schwarztee</option>
<option value="Grüntee">Grüntee</option>
<option value="Weißtee">Weißtee</option>
<option value="Oolong">Oolong</option>
<option value="Pu-Erh">Pu-Erh</option>
<option value="Früchtetee">Früchtetee</option>
<option value="Krätertee">Krätertee</option>
<option value="Sonstiges">Sonstiges</option>
</select>
</div>
<div id="teas-list" class="teas-grid"></div>
</section>
<!-- Tracken Tab -->
<section id="track" class="tab-pane">
<h2>Tee-Konsum tracken</h2>
<form id="track-form" class="track-form">
<div class="form-group">
<label for="track-tea">Tee-Sorte *</label>
<select id="track-tea" required>
<option value="">-- Wähle eine Tee-Sorte --</option>
</select>
</div>
<div class="form-group">
<label for="track-date">Datum *</label>
<input type="date" id="track-date" required>
</div>
<div class="form-group">
<label for="track-time">Uhrzeit</label>
<input type="time" id="track-time">
</div>
<div class="form-group">
<label for="track-amount">Menge (Tassen) *</label>
<input type="number" id="track-amount" min="1" max="10" value="1" required>
</div>
<div class="form-group">
<label for="track-teaspoons">Menge Tee-Pulver (Teelöffel)</label>
<input type="number" id="track-teaspoons" min="0" max="10" value="1" step="0.5">
</div>
<div class="form-group">
<label for="track-notes">Notizen</label>
<textarea id="track-notes" rows="3" placeholder="z.B. Mit Honig, besonders stark..."></textarea>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">📝 Tracken</button>
<button type="button" id="cancel-track" class="btn btn-secondary">Abbrechen</button>
</div>
</form>
<div class="recent-tracked">
<h3>Letzte Einträge</h3>
<div id="track-recent-entries" class="activity-list"></div>
</div>
</section>
<!-- Einstellungen Tab -->
<section id="settings" class="tab-pane">
<h2>⚙️ Einstellungen</h2>
<div class="settings-section">
<h3>💾 Datenverwaltung</h3>
<p>Daten werden im <code>data/</code>-Verzeichnis gespeichert (falls ein lokaler Server läuft) oder im Browser-Speicher (localStorage).</p>
<div class="form-group">
<label>Speicherstatus</label>
<div id="sync-status" class="status-badge">Lokaler Modus</div>
</div>
<div class="form-actions">
<button id="export-data" class="btn btn-secondary">📤 Daten exportieren</button>
<button id="import-data" class="btn btn-secondary">📥 Daten importieren</button>
<button id="clear-data" class="btn btn-danger">🗑️ Alle Daten löschen</button>
</div>
</div>
<div class="settings-section">
<h3>🎨 Hintergrundbild</h3>
<p>Wähle ein Hintergrundbild für deine TeeTracker-App.</p>
<div class="form-group">
<label for="bg-image-upload">Hintergrundbild hochladen:</label>
<input type="file" id="bg-image-upload" accept="image/*">
</div>
<div class="form-group">
<label for="bg-image-preview">Vorschau:</label>
<div id="bg-image-preview" class="bg-preview" style="display: none;">
<img id="bg-preview-img" style="max-width: 200px; max-height: 150px; border-radius: 8px; margin-top: 10px;">
</div>
</div>
<div class="form-group checkbox-group">
<label>
<input type="checkbox" id="bg-enabled">
<span class="checkmark"></span>
Hintergrundbild aktivieren
</label>
</div>
<div class="form-actions">
<button id="remove-bg" class="btn btn-secondary" style="display: none;">🗑️ Hintergrund entfernen</button>
<button id="save-bg" class="btn btn-primary">💾 Hintergrund speichern</button>
</div>
</div>
</div>
<div class="settings-section">
<h3>📊 Statistik</h3>
<div class="stats-overview">
<div class="stat-item">
<span class="stat-label">Gesamt Tassen:</span>
<span id="settings-total-cups">0</span>
</div>
<div class="stat-item">
<span class="stat-label">Tee-Sorten:</span>
<span id="settings-total-teas">0</span>
</div>
<div class="stat-item">
<span class="stat-label">Erster Eintrag:</span>
<span id="settings-first-entry">-</span>
</div>
<div class="stat-item">
<span class="stat-label">Letzter Eintrag:</span>
<span id="settings-last-entry">-</span>
</div>
</div>
</div>
</section>
<!-- Statistiken Tab -->
<section id="stats" class="tab-pane">
<h2>Statistiken</h2>
<div class="stats-filters">
<label for="stats-period">Zeitraum:</label>
<select id="stats-period">
<option value="today">Heute</option>
<option value="week">Letzte 7 Tage</option>
<option value="month">Letzter Monat</option>
<option value="year">Letztes Jahr</option>
<option value="all">Gesamt</option>
</select>
</div>
<div class="stats-container">
<div class="chart-container">
<h3>Tee-Konsum nach Sorte</h3>
<canvas id="tea-type-chart"></canvas>
</div>
<div class="chart-container">
<h3>Tagesverlauf</h3>
<canvas id="daily-chart"></canvas>
</div>
</div>
<div class="stats-details">
<h3>Detaillierte Statistiken</h3>
<div id="stats-details" class="details-grid"></div>
</div>
</section>
</main>
<!-- Modal für Tee hinzufügen/bearbeiten -->
<div id="tea-modal" class="modal">
<div class="modal-content">
<div class="modal-header">
<h2 id="modal-title">Tee hinzufügen</h2>
<button id="close-modal" class="close-btn">&times;</button>
</div>
<form id="tea-form" class="modal-form">
<input type="hidden" id="tea-id">
<div class="form-group">
<label for="tea-name">Name *</label>
<input type="text" id="tea-name" required placeholder="z.B. Earl Grey">
</div>
<div class="form-group">
<label for="tea-type">Typ *</label>
<select id="tea-type" required>
<option value="">-- Wähle einen Typ --</option>
<option value="Schwarztee">Schwarztee</option>
<option value="Grüntee">Grüntee</option>
<option value="Weißtee">Weißtee</option>
<option value="Oolong">Oolong</option>
<option value="Pu-Erh">Pu-Erh</option>
<option value="Früchtetee">Früchtetee</option>
<option value="Krätertee">Krätertee</option>
<option value="Sonstiges">Sonstiges</option>
</select>
</div>
<div class="form-group">
<label for="tea-brand">Marke</label>
<input type="text" id="tea-brand" placeholder="z.B. Twinings, Pukka">
</div>
<div class="form-group">
<label for="tea-description">Beschreibung</label>
<textarea id="tea-description" rows="3" placeholder="Beschreibung des Tees..."></textarea>
</div>
<div class="form-group checkbox-group">
<label>
<input type="checkbox" id="tea-organic">
<span class="checkmark"></span>
Bio-Tee
</label>
</div>
<div class="form-group">
<label>Bewertung</label>
<div class="star-rating" id="tea-rating">
<span class="star" data-value="1"></span>
<span class="star" data-value="2"></span>
<span class="star" data-value="3"></span>
<span class="star" data-value="4"></span>
<span class="star" data-value="5"></span>
</div>
<input type="hidden" id="tea-rating-value" value="3">
</div>
<div class="form-group">
<label for="tea-image-upload">Tee-Foto</label>
<input type="file" id="tea-image-upload" accept="image/*">
<div id="tea-image-preview" class="image-preview" style="display: none; margin-top: 10px;">
<img id="tea-image-preview-img" style="max-width: 150px; max-height: 150px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.2);">
</div>
<input type="hidden" id="tea-image-data" value="">
</div>
<div class="form-group">
<label for="tea-color">Farbe</label>
<input type="color" id="tea-color" value="#8B4513">
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">💾 Speichern</button>
<button type="button" id="delete-tea-btn" class="btn btn-danger" style="display: none;">🗑️ Löschen</button>
</div>
</form>
</div>
</div>
<!-- Bestätigungsmodal -->
<div id="confirm-modal" class="modal">
<div class="modal-content" style="max-width: 400px;">
<div class="modal-header">
<h2>Bestätigung</h2>
<button id="close-confirm" class="close-btn">&times;</button>
</div>
<div class="modal-body">
<p id="confirm-message"></p>
</div>
<div class="modal-footer">
<button id="confirm-yes" class="btn btn-danger">Ja, löschen</button>
<button id="confirm-no" class="btn btn-secondary">Abbrechen</button>
</div>
</div>
</div>
<!-- Import Modal -->
<div id="import-modal" class="modal">
<div class="modal-content" style="max-width: 600px;">
<div class="modal-header">
<h2>Daten importieren</h2>
<button id="close-import-modal" class="close-btn">&times;</button>
</div>
<div class="modal-body">
<p>Füge deine exportierten TeeTracker-Daten hier ein:</p>
<textarea id="import-data-textarea" class="modal-textarea" placeholder="{\n \"teas\": [...],\n \"entries\": [...]\n}"></textarea>
</div>
<div class="modal-footer">
<button id="import-data-btn" class="btn btn-primary">📥 Importieren</button>
<button id="cancel-import-btn" class="btn btn-secondary">Abbrechen</button>
</div>
</div>
</div>
</div>
<!-- Toast Container -->
<div id="toast-container" class="toast-container"></div>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="app.js"></script>
</body>
</html>