diff --git a/app.js b/app.js
index f2eb0e5..523a650 100644
--- a/app.js
+++ b/app.js
@@ -283,7 +283,8 @@ class TeeTracker {
if (teas) {
this.teas = teas.map(tea => ({
...tea,
- organic: tea.organic !== undefined ? tea.organic : false
+ organic: tea.organic !== undefined ? tea.organic : false,
+ rating: tea.rating !== undefined ? tea.rating : 3
}));
}
@@ -312,7 +313,8 @@ class TeeTracker {
try {
this.teas = JSON.parse(teasData).map(tea => ({
...tea,
- organic: tea.organic !== undefined ? tea.organic : false
+ organic: tea.organic !== undefined ? tea.organic : false,
+ rating: tea.rating !== undefined ? tea.rating : 3
}));
} catch (error) {
this.teas = [];
@@ -419,6 +421,7 @@ class TeeTracker {
description: tea.description || '',
color: tea.color || '#8B4513',
organic: tea.organic || false,
+ rating: tea.rating || 3,
createdAt: new Date().toISOString()
};
this.teas.push(newTea);
@@ -627,6 +630,12 @@ class TeeTracker {
document.getElementById('delete-tea-btn').addEventListener('click', () => this.handleDeleteTea());
}
+ // Star rating for tea form
+ const teaRating = document.getElementById('tea-rating');
+ if (teaRating) {
+ teaRating.addEventListener('click', (e) => this.handleStarRatingClick(e));
+ }
+
// Confirm modal
if (document.getElementById('close-confirm')) {
document.getElementById('close-confirm').addEventListener('click', () => this.closeConfirmModal());
@@ -1244,6 +1253,7 @@ class TeeTracker {
@@ -1288,6 +1298,7 @@ class TeeTracker {
@@ -1319,6 +1330,8 @@ class TeeTracker {
document.getElementById('tea-description').value = tea.description || '';
document.getElementById('tea-color').value = tea.color || '#8B4513';
document.getElementById('tea-organic').checked = tea.organic || false;
+ document.getElementById('tea-rating-value').value = tea.rating || 3;
+ this.renderStarRating(tea.rating || 3, 'tea-rating');
deleteBtn.style.display = 'inline-flex';
this.currentTeaId = tea.id;
}
@@ -1326,6 +1339,8 @@ class TeeTracker {
document.getElementById('modal-title').textContent = 'Tee hinzufügen';
form.reset();
document.getElementById('tea-id').value = '';
+ document.getElementById('tea-rating-value').value = 3;
+ this.renderStarRating(3, 'tea-rating');
deleteBtn.style.display = 'none';
this.currentTeaId = null;
}
@@ -1352,7 +1367,8 @@ class TeeTracker {
brand: document.getElementById('tea-brand').value.trim(),
description: document.getElementById('tea-description').value.trim(),
color: document.getElementById('tea-color').value,
- organic: document.getElementById('tea-organic').checked
+ organic: document.getElementById('tea-organic').checked,
+ rating: parseInt(document.getElementById('tea-rating-value').value) || 3
};
const teaId = document.getElementById('tea-id').value;
@@ -1373,6 +1389,44 @@ class TeeTracker {
this.updateSettingsStats();
}
+ handleStarRatingClick(e) {
+ const star = e.target.closest('.star');
+ if (!star) return;
+
+ const value = parseInt(star.dataset.value);
+ const ratingContainer = document.getElementById('tea-rating');
+ const ratingInput = document.getElementById('tea-rating-value');
+
+ if (ratingContainer && ratingInput) {
+ // Update active stars
+ ratingContainer.querySelectorAll('.star').forEach((s, index) => {
+ s.classList.toggle('active', index < value);
+ });
+
+ // Set the hidden input value
+ ratingInput.value = value;
+ }
+ }
+
+ renderStarRating(rating, containerId) {
+ const container = document.getElementById(containerId);
+ if (!container) return;
+
+ const stars = [];
+ for (let i = 1; i <= 5; i++) {
+ stars.push(`★`);
+ }
+ container.innerHTML = stars.join('');
+ }
+
+ renderStarRatingStatic(rating) {
+ const stars = [];
+ for (let i = 1; i <= 5; i++) {
+ stars.push(`★`);
+ }
+ return stars.join('');
+ }
+
editTea(teaId) {
this.openTeaModal(teaId);
}
diff --git a/index.html b/index.html
index f9f391b..8d46073 100644
--- a/index.html
+++ b/index.html
@@ -290,6 +290,18 @@
+
+
diff --git a/styles.css b/styles.css
index 4ad19ee..a08f907 100644
--- a/styles.css
+++ b/styles.css
@@ -971,3 +971,45 @@ header p {
z-index: -1;
pointer-events: none;
}
+
+/* Star Rating */
+.star-rating {
+ display: flex;
+ gap: 5px;
+ font-size: 1.5rem;
+ cursor: pointer;
+ margin-top: 5px;
+}
+
+.star-rating .star {
+ color: #ccc;
+ transition: color 0.2s;
+}
+
+.star-rating .star:hover,
+.star-rating .star.active {
+ color: #FFD700;
+}
+
+.star-rating .star:hover ~ .star {
+ color: #ccc;
+}
+
+/* Rating display on tea cards */
+.rating-display {
+ color: #FFD700;
+ font-size: 0.9rem;
+ margin-left: 5px;
+}
+
+/* Rating display on tea cards */
+.tea-rating-display {
+ display: inline-block;
+ margin-left: 8px;
+ font-size: 0.9rem;
+}
+
+.tea-rating-display .star {
+ color: #FFD700;
+ font-size: 1rem;
+}