From eb3924f60f5bfa75dd132c86322d88454e04d41e Mon Sep 17 00:00:00 2001 From: Zan <62830223+Zan1456@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:44:53 +0200 Subject: [PATCH] Fixes for custom things and mark as done --- timetable/timetable.js | 197 +++++++++++++++++++++-------------------- 1 file changed, 99 insertions(+), 98 deletions(-) diff --git a/timetable/timetable.js b/timetable/timetable.js index 5cdad73..e09a091 100644 --- a/timetable/timetable.js +++ b/timetable/timetable.js @@ -79,8 +79,8 @@ } } - function addCustomHomework(lessonKey, homeworkText) { - const customHomework = getCustomHomework(); + async function addCustomHomework(lessonKey, homeworkText) { + const customHomework = await getCustomHomework(); if (!customHomework[lessonKey]) { customHomework[lessonKey] = []; } @@ -91,36 +91,36 @@ completed: false, createdAt: new Date().toISOString() }); - saveCustomHomework(customHomework); + await saveCustomHomework(customHomework); return homeworkId; } - function removeCustomHomework(lessonKey, homeworkId) { - const customHomework = getCustomHomework(); + async function removeCustomHomework(lessonKey, homeworkId) { + const customHomework = await getCustomHomework(); if (customHomework[lessonKey]) { customHomework[lessonKey] = customHomework[lessonKey].filter(hw => hw.id !== homeworkId); if (customHomework[lessonKey].length === 0) { delete customHomework[lessonKey]; } - saveCustomHomework(customHomework); + await saveCustomHomework(customHomework); } } - function toggleCustomHomeworkCompletion(lessonKey, homeworkId) { - const customHomework = getCustomHomework(); + async function toggleCustomHomeworkCompletion(lessonKey, homeworkId) { + const customHomework = await getCustomHomework(); if (customHomework[lessonKey]) { const homework = customHomework[lessonKey].find(hw => hw.id === homeworkId); if (homework) { homework.completed = !homework.completed; - saveCustomHomework(customHomework); + await saveCustomHomework(customHomework); return homework.completed; } } return false; } - function addCustomTest(lessonKey, testText) { - const customTests = getCustomTests(); + async function addCustomTest(lessonKey, testText) { + const customTests = await getCustomTests(); if (!customTests[lessonKey]) { customTests[lessonKey] = []; } @@ -131,28 +131,28 @@ completed: false, createdAt: new Date().toISOString() }); - saveCustomTests(customTests); + await saveCustomTests(customTests); return testId; } - function removeCustomTest(lessonKey, testId) { - const customTests = getCustomTests(); + async function removeCustomTest(lessonKey, testId) { + const customTests = await getCustomTests(); if (customTests[lessonKey]) { customTests[lessonKey] = customTests[lessonKey].filter(test => test.id !== testId); if (customTests[lessonKey].length === 0) { delete customTests[lessonKey]; } - saveCustomTests(customTests); + await saveCustomTests(customTests); } } - function toggleCustomTestCompletion(lessonKey, testId) { - const customTests = getCustomTests(); + async function toggleCustomTestCompletion(lessonKey, testId) { + const customTests = await getCustomTests(); if (customTests[lessonKey]) { const test = customTests[lessonKey].find(t => t.id === testId); if (test) { test.completed = !test.completed; - saveCustomTests(customTests); + await saveCustomTests(customTests); return test.completed; } } @@ -447,9 +447,18 @@ return lessons; } - function generateTimeGrid(lessons, weekDates) { + async function generateTimeGrid(lessons, weekDates) { const specialDayLessons = lessons.filter((l) => l.isSpecialDay); const regularLessons = lessons.filter((l) => !l.isSpecialDay); + const customHomework = await getCustomHomework(); + const customTests = await getCustomTests(); + + const homeworkCompletionMap = {}; + for (const lesson of lessons) { + if (lesson.lessonId) { + homeworkCompletionMap[lesson.lessonId] = await isHomeworkCompleted(lesson.lessonId); + } + } const times = [...new Set(regularLessons.map((l) => l.startTime))].sort( (a, b) => { @@ -524,11 +533,9 @@ (l) => l.startTime === time && l.day === dayIndex, ); - const lastLessonTime = lastLessonTimes[dayIndex]; const isAfterLastLesson = lastLessonTime && helper.convertTimeToMinutes(time) > helper.convertTimeToMinutes(lastLessonTime); - - + if (dayLessons.length === 0 && isAfterLastLesson) { return `
`; } @@ -553,11 +560,8 @@ ${ (() => { const lessonKey = `${lesson.subject}_${lesson.startTime}_${lesson.day}`; - const customHomework = getCustomHomework(); - const customTests = getCustomTests(); const hasCustomHomework = customHomework[lessonKey] && customHomework[lessonKey].length > 0; const hasCustomTests = customTests[lessonKey] && customTests[lessonKey].length > 0; - const hasAnyIndicators = lesson.hasHomework || lesson.testInfo || hasCustomHomework || hasCustomTests; return hasAnyIndicators ? ` @@ -566,7 +570,7 @@ lesson.hasHomework ? ` - ${lesson.lessonId && isHomeworkCompleted(lesson.lessonId) ? 'Megoldott házi feladat' : 'Házi feladat'} + ${lesson.lessonId && homeworkCompletionMap[lesson.lessonId] ? 'Megoldott házi feladat' : 'Házi feladat'} ` : "" @@ -804,7 +808,7 @@ const completionBtn = document.createElement('button'); completionBtn.className = 'homework-completion-header-btn'; - const isCompleted = isHomeworkCompleted(lesson.lessonId); + const isCompleted = await isHomeworkCompleted(lesson.lessonId); const checkIcon = document.createElement('img'); checkIcon.src = chrome.runtime.getURL('icons/pipa.svg'); checkIcon.alt = 'Megoldva'; @@ -815,8 +819,8 @@ completionBtn.classList.toggle('completed', isCompleted); completionBtn.title = isCompleted ? 'Megoldva - kattints a visszavonáshoz' : 'Megoldottként jelöl'; - completionBtn.addEventListener('click', () => { - const nowCompleted = toggleHomeworkCompletion(lesson.lessonId); + completionBtn.addEventListener('click', async () => { + const nowCompleted = await toggleHomeworkCompletion(lesson.lessonId); completionBtn.classList.toggle('completed', nowCompleted); completionBtn.title = nowCompleted ? 'Megoldva - kattints a visszavonáshoz' : 'Megoldottként jelöl'; const lessonCards = document.querySelectorAll(`[data-lesson-id="${lesson.lessonId}"]`); @@ -953,7 +957,7 @@ const lessonKey = getLessonKey(lesson); - const customHomework = getCustomHomework(); + const customHomework = await getCustomHomework(); const customHomeworkItems = customHomework[lessonKey] || []; if (customHomeworkItems.length > 0) { @@ -1046,8 +1050,8 @@ deleteIcon.style.opacity = '0.5'; deleteBtn.appendChild(deleteIcon); - completeBtn.addEventListener('click', () => { - const newCompleted = toggleCustomHomeworkCompletion(lessonKey, homework.id); + completeBtn.addEventListener('click', async () => { + const newCompleted = await toggleCustomHomeworkCompletion(lessonKey, homework.id); if (newCompleted) { homeworkText.style.textDecoration = 'line-through'; homeworkText.style.opacity = '0.6'; @@ -1063,9 +1067,9 @@ } }); - deleteBtn.addEventListener('click', () => { + deleteBtn.addEventListener('click', async () => { if (confirm('Biztosan törölni szeretnéd ezt a házi feladatot?')) { - removeCustomHomework(lessonKey, homework.id); + await removeCustomHomework(lessonKey, homework.id); homeworkItem.remove(); } }); @@ -1145,7 +1149,7 @@ const lessonKey = getLessonKey(lesson); - const customTests = getCustomTests(); + const customTests = await getCustomTests(); const customTestItems = customTests[lessonKey] || []; if (customTestItems.length > 0) { @@ -1238,8 +1242,8 @@ deleteIcon.style.opacity = '0.5'; deleteBtn.appendChild(deleteIcon); - completeBtn.addEventListener('click', () => { - const newCompleted = toggleCustomTestCompletion(lessonKey, test.id); + completeBtn.addEventListener('click', async () => { + const newCompleted = await toggleCustomTestCompletion(lessonKey, test.id); if (newCompleted) { testText.style.textDecoration = 'line-through'; testText.style.opacity = '0.6'; @@ -1255,9 +1259,9 @@ } }); - deleteBtn.addEventListener('click', () => { + deleteBtn.addEventListener('click', async () => { if (confirm('Biztosan törölni szeretnéd ezt a számonkérést?')) { - removeCustomTest(lessonKey, test.id); + await removeCustomTest(lessonKey, test.id); testItem.remove(); } }); @@ -1280,7 +1284,7 @@ const lessonKey = getLessonKey(lesson); - const customHomework = getCustomHomework(); + const customHomework = await getCustomHomework(); const customHomeworkItems = customHomework[lessonKey] || []; if (!lesson.hasHomework && customHomeworkItems.length > 0) { @@ -1369,8 +1373,8 @@ deleteIcon.style.opacity = '0.5'; deleteBtn.appendChild(deleteIcon); - completeBtn.addEventListener('click', () => { - const newCompleted = toggleCustomHomeworkCompletion(lessonKey, homework.id); + completeBtn.addEventListener('click', async () => { + const newCompleted = await toggleCustomHomeworkCompletion(lessonKey, homework.id); if (newCompleted) { homeworkText.style.textDecoration = 'line-through'; homeworkText.style.opacity = '0.6'; @@ -1386,9 +1390,9 @@ } }); - deleteBtn.addEventListener('click', () => { + deleteBtn.addEventListener('click', async () => { if (confirm('Biztosan törölni szeretnéd ezt a házi feladatot?')) { - removeCustomHomework(lessonKey, homework.id); + await removeCustomHomework(lessonKey, homework.id); homeworkItem.remove(); } }); @@ -1406,8 +1410,7 @@ body.appendChild(customHomeworkSection); } - - const customTests = getCustomTests(); + const customTests = await getCustomTests(); const customTestItems = customTests[lessonKey] || []; if (!lesson.testInfo && customTestItems.length > 0) { @@ -1496,8 +1499,8 @@ deleteIcon.style.opacity = '0.5'; deleteBtn.appendChild(deleteIcon); - completeBtn.addEventListener('click', () => { - const newCompleted = toggleCustomTestCompletion(lessonKey, test.id); + completeBtn.addEventListener('click', async () => { + const newCompleted = await toggleCustomTestCompletion(lessonKey, test.id); if (newCompleted) { testText.style.textDecoration = 'line-through'; testText.style.opacity = '0.6'; @@ -1513,9 +1516,9 @@ } }); - deleteBtn.addEventListener('click', () => { + deleteBtn.addEventListener('click', async () => { if (confirm('Biztosan törölni szeretnéd ezt a számonkérést?')) { - removeCustomTest(lessonKey, test.id); + await removeCustomTest(lessonKey, test.id); testItem.remove(); } }); @@ -1606,7 +1609,7 @@ const timetableGrid = document.querySelector(".timetable-grid"); if (timetableGrid) { - const newContent = generateTimeGrid(lessons, weekDates); + const newContent = await generateTimeGrid(lessons, weekDates); timetableGrid.innerHTML = ''; const parser1 = new DOMParser(); @@ -1733,7 +1736,7 @@ if (e.target === addModal) closeAddModal(); }); - saveBtn.addEventListener('click', () => { + saveBtn.addEventListener('click', async () => { const text = textArea.value.trim(); const type = typeSelect.value; @@ -1745,9 +1748,9 @@ const lessonKey = getLessonKey(lesson); if (type === 'homework') { - addCustomHomework(lessonKey, text); + await addCustomHomework(lessonKey, text); } else { - addCustomTest(lessonKey, text); + await addCustomTest(lessonKey, text); } closeAddModal(); @@ -2380,7 +2383,7 @@ timetableGrid.className = 'timetable-grid'; - const gridContent = generateTimeGrid(data.lessons, data.weekDates); + const gridContent = await generateTimeGrid(data.lessons, data.weekDates); const parser3 = new DOMParser(); const doc = parser3.parseFromString(`
${gridContent}
`, 'text/html'); @@ -2478,20 +2481,20 @@ const expandBtn = document.getElementById("expandWeekView"); if (prevBtn) { - prevBtn.addEventListener("click", () => { + prevBtn.addEventListener("click", async () => { selectedWeekNumber--; if (selectedWeekNumber < 1) selectedWeekNumber = 52; updateWeekDisplay(); - loadWeekData(selectedWeekNumber); + await loadWeekData(selectedWeekNumber); }); } if (nextBtn) { - nextBtn.addEventListener("click", () => { + nextBtn.addEventListener("click", async () => { selectedWeekNumber++; if (selectedWeekNumber > 52) selectedWeekNumber = 1; updateWeekDisplay(); - loadWeekData(selectedWeekNumber); + await loadWeekData(selectedWeekNumber); }); } @@ -2501,14 +2504,14 @@ }); } - const weekClickHandler = (e) => { + const weekClickHandler = async (e) => { const weekCell = e.target.closest(".week-cell"); if (weekCell) { const weekNumber = parseInt(weekCell.dataset.week); if (!isNaN(weekNumber)) { selectedWeekNumber = weekNumber; updateWeekDisplay(); - loadWeekData(selectedWeekNumber); + await loadWeekData(selectedWeekNumber); } } }; @@ -2520,48 +2523,46 @@ setupWeekModal(); } - function loadWeekData(weekNumber) { - - const today = new Date(); - let currentYear = today.getFullYear(); + async function loadWeekData(weekNumber) { + try { + const today = new Date(); + let currentYear = today.getFullYear(); - if (today.getMonth() < 8) { - currentYear--; - } + if (today.getMonth() < 8) { + currentYear--; + } - const startOfWeek = getDateOfWeek(currentYear, weekNumber, 1); - const endOfWeek = getDateOfWeek(currentYear, weekNumber, 7); - const startDate = startOfWeek.toISOString().split("T")[0]; - const endDate = endOfWeek.toISOString().split("T")[0]; + const startOfWeek = getDateOfWeek(currentYear, weekNumber, 1); + const endOfWeek = getDateOfWeek(currentYear, weekNumber, 7); + const startDate = startOfWeek.toISOString().split("T")[0]; + const endDate = endOfWeek.toISOString().split("T")[0]; - loadWeekDataFromAPI(startDate, endDate) - .then((apiData) => { - const weekDates = generateWeekDates(startDate); - const lessons = convertAPIDataToLessons(apiData, weekDates); + const apiData = await loadWeekDataFromAPI(startDate, endDate); + const weekDates = generateWeekDates(startDate); + const lessons = convertAPIDataToLessons(apiData, weekDates); - const timetableContainer = document.querySelector(".timetable-grid"); - if (timetableContainer) { - - timetableContainer.innerHTML = ''; - const gridContent = generateTimeGrid(lessons, weekDates); + const timetableContainer = document.querySelector(".timetable-grid"); + if (timetableContainer) { + + timetableContainer.innerHTML = ''; + const gridContent = await generateTimeGrid(lessons, weekDates); const parser2 = new DOMParser(); - const doc = parser2.parseFromString(`
${gridContent}
`, 'text/html'); - const tempDiv = doc.querySelector('div'); - while (tempDiv.firstChild) { - timetableContainer.appendChild(tempDiv.firstChild); - } - setupLessonCardListeners(); - - setTimeout(async () => { - await updateHomeworkIconsFromCookie(); - }, 100); - } - }) - .catch((error) => { - console.error("Hét adatainak betöltése sikertelen:", error); - }); + const doc = parser2.parseFromString(`
${gridContent}
`, 'text/html'); + const tempDiv = doc.querySelector('div'); + while (tempDiv.firstChild) { + timetableContainer.appendChild(tempDiv.firstChild); + } + setupLessonCardListeners(); + + setTimeout(async () => { + await updateHomeworkIconsFromCookie(); + }, 100); + } + } catch (error) { + console.error("Hét adatainak betöltése sikertelen:", error); + } } function openWeekModal() { @@ -2629,14 +2630,14 @@ }); } - const modalWeekClickHandler = (e) => { + const modalWeekClickHandler = async (e) => { const weekCell = e.target.closest(".modal-week-cell"); if (weekCell) { const weekNumber = parseInt(weekCell.dataset.week); if (!isNaN(weekNumber)) { selectedWeekNumber = weekNumber; updateWeekDisplay(); - loadWeekData(selectedWeekNumber); + await loadWeekData(selectedWeekNumber); closeWeekModal(); } }