Немного исправил сетку графика
This commit is contained in:
@@ -81,6 +81,7 @@ export async function initAcademicCalendar() {
|
||||
let timeSlotScopes = [];
|
||||
let timeSlotDateAssignments = [];
|
||||
let activeCalendarDay = null;
|
||||
let selectedCalendarDayKey = null;
|
||||
|
||||
bindEvents();
|
||||
|
||||
@@ -521,17 +522,22 @@ export async function initAcademicCalendar() {
|
||||
}
|
||||
|
||||
function renderCalendarGrid(rows) {
|
||||
activeCalendarDay = null;
|
||||
selectedCalendarDayKey = null;
|
||||
const grouped = groupBy(rows, row => row.courseNumber);
|
||||
calendarGrid.innerHTML = Array.from(grouped.entries()).map(([course, courseRows]) => `
|
||||
<section class="calendar-course-block">
|
||||
<div class="calendar-course-header">
|
||||
<h3>${course} курс</h3>
|
||||
<span>${courseRows.length} дней</span>
|
||||
</div>
|
||||
calendarGrid.innerHTML = Array.from(grouped.entries()).map(([course, courseRows], index) => `
|
||||
<details class="calendar-course-block" ${index === 0 ? 'open' : ''}>
|
||||
<summary class="calendar-course-header">
|
||||
<span class="calendar-course-title">
|
||||
<span class="calendar-course-chevron" aria-hidden="true"></span>
|
||||
<span>${course} курс</span>
|
||||
</span>
|
||||
<span class="calendar-course-meta">${courseRows.length} дней</span>
|
||||
</summary>
|
||||
<div class="calendar-semesters-grid">
|
||||
${renderCourseSemesters(Number(course), courseRows)}
|
||||
</div>
|
||||
</section>
|
||||
</details>
|
||||
`).join('');
|
||||
populateFillCourseSelect();
|
||||
renderCalendarTotals();
|
||||
@@ -612,6 +618,7 @@ export async function initAcademicCalendar() {
|
||||
|
||||
function openCalendarDayDialog(day) {
|
||||
activeCalendarDay = day;
|
||||
selectCalendarDay(day);
|
||||
calendarDayDialogDate.textContent = `${formatLongDate(day.dataset.date)} (${shortDayLabel(day.dataset.day)})`;
|
||||
calendarDayDialogCourse.textContent = `${day.dataset.course} курс`;
|
||||
calendarDayDialogWeek.textContent = `${day.dataset.week} неделя`;
|
||||
@@ -624,6 +631,7 @@ export async function initAcademicCalendar() {
|
||||
syncSelects(calendarDayDialogActivitySelect);
|
||||
syncSelects(calendarDayDialogTimeScopeSelect);
|
||||
updateCalendarDayDialogSummary(day);
|
||||
renderCalendarTotals();
|
||||
calendarDayDialog.classList.add('open');
|
||||
}
|
||||
|
||||
@@ -730,6 +738,17 @@ export async function initAcademicCalendar() {
|
||||
day.setAttribute('title', `${formatLongDate(day.dataset.date)}, ${shortDayLabel(day.dataset.day)}, ${day.dataset.week} неделя, ${code} - ${activity?.name || ''}`);
|
||||
}
|
||||
|
||||
function selectCalendarDay(day) {
|
||||
if (!day) return;
|
||||
selectedCalendarDayKey = calendarDayKey(day);
|
||||
calendarGrid.querySelectorAll('.calendar-day.is-selected').forEach(item => item.classList.remove('is-selected'));
|
||||
day.classList.add('is-selected');
|
||||
}
|
||||
|
||||
function calendarDayKey(day) {
|
||||
return `${day.dataset.course}:${day.dataset.date}`;
|
||||
}
|
||||
|
||||
function buildDefaultGrid(calendar) {
|
||||
const rows = [];
|
||||
const dates = enumerateDates(calendar.academicYearStartDate, calendar.academicYearEndDate);
|
||||
@@ -788,11 +807,18 @@ export async function initAcademicCalendar() {
|
||||
const key = activity ? activity.code : '-';
|
||||
counts.set(key, (counts.get(key) || 0) + 1);
|
||||
});
|
||||
const selectedDay = selectedCalendarDayKey
|
||||
? Array.from(calendarGrid.querySelectorAll('.calendar-day')).find(day => calendarDayKey(day) === selectedCalendarDayKey)
|
||||
: null;
|
||||
const selectedActivity = selectedDay ? activityById(selectedDay.querySelector('.calendar-day-activity').value) : null;
|
||||
const selectedCode = selectedActivity?.code || null;
|
||||
calendarTotals.innerHTML = Array.from(counts.entries())
|
||||
.sort(([a], [b]) => a.localeCompare(b, 'ru'))
|
||||
.map(([code, count]) => {
|
||||
const activity = activityTypes.find(item => item.code === code);
|
||||
return `<span class="calendar-total-chip" style="--chip-color:${escapeHtml(activity?.colorCode || '#64748b')}">${escapeHtml(code)}: ${count}</span>`;
|
||||
const selectedClass = selectedCode === code ? ' is-selected' : '';
|
||||
const suffix = selectedCode === code ? '<span class="calendar-total-selected">выбрано</span>' : '';
|
||||
return `<span class="calendar-total-chip${selectedClass}" style="--chip-color:${escapeHtml(activity?.colorCode || '#64748b')}">${escapeHtml(code)}: ${count}${suffix}</span>`;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user