sektaolga-fodmapcommits3cfee72
Analyzing diff...
index.html+4 −3
index 2a4d760..ed02791 100644 @@ -40,7 +40,7 @@ <div class="card journal"><h2>📚 Сохранённые приёмы пищи</h2> <div class="small">Сначала сохраните состав еды. Реакцию можно добавить позже — через 30 минут, несколько часов или на следующий день.</div> <div class="export" data-feature="journal-export-v1"><b>Экспорт дневника</b><div class="small" style="margin:4px 0 9px">Скопируйте читаемый отчёт за выбранный период или сохраните полную резервную копию для будущего импорта.</div> -<div class="export-controls"><label><span class="small">Период отчёта</span><select id="exportPeriod" style="width:100%"><option value="today">Сегодня</option><option value="week">Последние 7 дней</option><option value="all">Весь дневник</option></select></label><button onclick="copyJournalReport()">Скопировать отчёт</button><button class="secondary" onclick="downloadJournalBackup()">Скачать резервную копию</button></div><div id="exportStatus" class="small export-status" role="status" aria-live="polite"></div></div> +<div class="export-controls"><label><span class="small">Период отчёта</span><select id="exportPeriod" style="width:100%"><option value="today">Сегодня</option><option value="yesterday">Вчера</option><option value="week">Последние 7 дней</option><option value="all">Весь дневник</option></select></label><button onclick="copyJournalReport()">Скопировать отчёт</button><button class="secondary" onclick="downloadJournalBackup()">Скачать резервную копию</button></div><div id="exportStatus" class="small export-status" role="status" aria-live="polite"></div></div> <div class="daychart" data-feature="day-chart-v1"><b>Итоги дня</b><div class="small" style="margin:4px 0 9px">Какие FODMAP-группы и в каком количестве были за период, и из каких продуктов они пришли.</div> <div class="chart-controls"><label><span class="small">Период</span><select id="chartPeriod" onchange="renderDayChart()" style="width:100%"><option value="today">Сегодня</option><option value="week">Последние 7 дней</option></select></label><label><span class="small">Показывать</span><select id="chartMetric" onchange="renderDayChart()" style="width:100%"><option value="grams">Граммы</option><option value="items">Количество продуктов</option></select></label></div> <div id="dayChart" class="chart-body"></div><div id="chartDetail" class="chart-detail small"></div></div> @@ -451,11 +451,12 @@ function mealDateTime(e){ function mealDateLabel(e){return mealDateTime(e).toLocaleString('ru-RU',{day:'2-digit',month:'2-digit',year:'numeric',hour:'2-digit',minute:'2-digit'})} function exportEntries(period){ let entries=getEntries().slice().sort((a,b)=>mealDateTime(a)-mealDateTime(b));if(period==='all')return entries; - let today=new Date();today.setHours(0,0,0,0);let from=new Date(today),until=new Date(today);until.setDate(until.getDate()+1);if(period==='week')from.setDate(from.getDate()-6); + let today=new Date();today.setHours(0,0,0,0);let from=new Date(today),until=new Date(today);until.setDate(until.getDate()+1); + if(period==='yesterday'){from.setDate(from.getDate()-1);until=new Date(today)}else if(period==='week')from.setDate(from.getDate()-6); return entries.filter(e=>{let date=mealDateTime(e);return date>=from&&date<until}) } function journalReport(period){ - let labels={today:'сегодня',week:'последние 7 дней',all:'весь дневник'},entries=exportEntries(period),lines=[`Дневник питания — ${labels[period]||labels.all}`,`Сформирован: ${new Date().toLocaleString('ru-RU')}`,`Приёмов пищи: ${entries.length}`,'']; + let labels={today:'сегодня',yesterday:'вчера',week:'последние 7 дней',all:'весь дневник'},entries=exportEntries(period),lines=[`Дневник питания — ${labels[period]||labels.all}`,`Сформирован: ${new Date().toLocaleString('ru-RU')}`,`Приёмов пищи: ${entries.length}`,'']; if(!entries.length)return lines.concat('За выбранный период записей нет.').join('\n'); entries.forEach((e,i)=>{lines.push(`${i+1}. ${mealDateLabel(e)}`);lines.push('Состав: '+(e.meal||[]).map(m=>`${m.name} — ${m.g} г`).join(', '));let rs=e.reactions||[]; if(!rs.length)lines.push('Реакции: не отмечены.');else{lines.push(`Реакции (${rs.length}):`);rs.forEach((r,j)=>{let details=[`${r.severity}/10 — ${r.severityLabel||severityText[r.severity]||'без описания'}`,r.delay];if(r.types&&r.types.length)details.push(r.types.join(', '));lines.push(` ${j+1}) ${new Date(r.createdAt).toLocaleString('ru-RU')}: ${details.filter(Boolean).join(' • ')}`);if(r.comment)lines.push(` Комментарий: ${r.comment}`)})}lines.push('')});return lines.join('\n').trim()