Add yesterday-only journal report copy
AI Just committed 2026-08-20 08:35:39 +0000

Analyzing diff...

index.html+4 −3
index 2a4d760..ed02791 100644
--- a/index.html
+++ b/index.html
@@ -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()