Добавлен чек-лист полезных привычек (8 привычек, серия дней, статистика)

This commit is contained in:
Madina 2026-08-10 09:19:00 +00:00
parent c15d07a9ad
commit 875d3d6518

View File

@ -411,6 +411,7 @@
<button onclick="showSection('calendar')">📆 Календарь</button> <button onclick="showSection('calendar')">📆 Календарь</button>
<button onclick="showSection('tracker')">📊 Трекер прогресса</button> <button onclick="showSection('tracker')">📊 Трекер прогресса</button>
<button onclick="showSection('nutrition')">🥗 Питание</button> <button onclick="showSection('nutrition')">🥗 Питание</button>
<button onclick="showSection('habits')">✨ Привычки</button>
</nav> </nav>
<!-- СЕКЦИЯ: СЕГОДНЯ --> <!-- СЕКЦИЯ: СЕГОДНЯ -->
@ -506,6 +507,29 @@
<div id="progress-history" style="margin-top: 30px;"></div> <div id="progress-history" style="margin-top: 30px;"></div>
</div> </div>
<!-- СЕКЦИЯ: ПРИВЫЧКИ -->
<div id="habits" class="section">
<h2>✨ Полезные привычки для похудения</h2>
<p style="margin-bottom: 20px; color: #666;">Отмечай галочкой каждый день, когда выполнил привычку. Цель — 21 день подряд!</p>
<div id="habits-list"></div>
<div class="progress-stats" style="margin-top: 30px;">
<div class="stat-card" style="background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);">
<div class="value" id="habits-streak">0</div>
<div class="label">Дней подряд</div>
</div>
<div class="stat-card" style="background: linear-gradient(135deg, #30cfd0 0%, #330867 100%);">
<div class="value" id="habits-total">0</div>
<div class="label">Всего выполнено</div>
</div>
<div class="stat-card" style="background: linear-gradient(135deg, #a8ff78 0%, #78ffd6 100%);">
<div class="value" id="habits-percent">0%</div>
<div class="label">Успех сегодня</div>
</div>
</div>
</div>
<!-- СЕКЦИЯ: ПИТАНИЕ --> <!-- СЕКЦИЯ: ПИТАНИЕ -->
<div id="nutrition" class="section"> <div id="nutrition" class="section">
<h2>🥗 Питание для похудения</h2> <h2>🥗 Питание для похудения</h2>
@ -843,7 +867,19 @@
// === СОСТОЯНИЕ === // === СОСТОЯНИЕ ===
let currentWeek = 0; let currentWeek = 0;
let progressData = JSON.parse(localStorage.getItem('madinaProgress') || '{"entries":[],"completedDays":[],"water":[],"waterToday":0}'); let progressData = JSON.parse(localStorage.getItem('madinaProgress') || '{"entries":[],"completedDays":[],"water":[],"waterToday":0,"habits":{}}');
// === ПРИВЫЧКИ ===
const habitsList = [
{ id: 'water', icon: '💧', name: 'Выпить 8 стаканов воды' },
{ id: 'workout', icon: '💪', name: 'Тренировка по плану' },
{ id: 'breakfast', icon: '🍳', name: 'Здоровый завтрак' },
{ id: 'no_sugar', icon: '🚫', name: 'Без сахара и сладкого' },
{ id: 'sleep', icon: '😴', name: 'Сон 7-8 часов' },
{ id: 'no_late', icon: '🕖', name: 'Ужин до 19:00' },
{ id: 'walk', icon: '🚶', name: 'Прогулка 30 мин' },
{ id: 'stretch', icon: '🧘', name: 'Растяжка утром' }
];
// === ИНИЦИАЛИЗАЦИЯ === // === ИНИЦИАЛИЗАЦИЯ ===
function init() { function init() {
@ -1190,6 +1226,66 @@
const avg = progressData.entries.reduce((sum, e) => sum + (parseFloat(e.weight) || 0), 0) / progressData.entries.length; const avg = progressData.entries.reduce((sum, e) => sum + (parseFloat(e.weight) || 0), 0) / progressData.entries.length;
document.getElementById('avg-weight').textContent = avg.toFixed(1); document.getElementById('avg-weight').textContent = avg.toFixed(1);
} }
renderHabits();
}
function renderHabits() {
const todayStr = new Date().toDateString();
const container = document.getElementById('habits-list');
if (!container) return;
// Инициализация сегодняшних привычек
if (!progressData.habits[todayStr]) {
progressData.habits[todayStr] = {};
}
// Чек-лист привычек
container.innerHTML = habitsList.map(h => {
const done = progressData.habits[todayStr][h.id] ? 'checked' : '';
return '<div style="background: ' + (done ? 'linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%)' : '#f8f9fc') + '; padding: 15px; border-radius: 12px; margin: 10px 0; display: flex; align-items: center; gap: 15px; cursor: pointer; transition: 0.3s;" onclick="toggleHabit(\'' + h.id + '\')">' +
'<input type="checkbox" ' + done + ' style="width: 24px; height: 24px; cursor: pointer;">' +
'<span style="font-size: 28px;">' + h.icon + '</span>' +
'<span style="font-size: 16px; flex: 1;">' + h.name + '</span>' +
(done ? '<span style="color: #28a745; font-weight: bold;">✓ Выполнено!</span>' : '') +
'</div>';
}).join('');
// Статистика
const todayHabits = progressData.habits[todayStr] || {};
const doneCount = Object.values(todayHabits).filter(v => v).length;
const percent = Math.round((doneCount / habitsList.length) * 100);
// Серия подряд
let streak = 0;
const dates = Object.keys(progressData.habits).sort((a, b) => new Date(b) - new Date(a));
for (const date of dates) {
const dayHabits = progressData.habits[date];
const allDone = habitsList.every(h => dayHabits[h.id]);
if (allDone) streak++;
else break;
}
// Всего выполнено
let total = 0;
for (const date in progressData.habits) {
total += Object.values(progressData.habits[date]).filter(v => v).length;
}
document.getElementById('habits-streak').textContent = streak;
document.getElementById('habits-total').textContent = total;
document.getElementById('habits-percent').textContent = percent + '%';
}
function toggleHabit(id) {
const todayStr = new Date().toDateString();
if (!progressData.habits[todayStr]) {
progressData.habits[todayStr] = {};
}
progressData.habits[todayStr][id] = !progressData.habits[todayStr][id];
localStorage.setItem('madinaProgress', JSON.stringify(progressData));
renderHabits();
} }
function addWater() { function addWater() {