From a446afa153fed8dfc396f63522c9f62bdabfe471 Mon Sep 17 00:00:00 2001 From: Zan <62830223+Zan1456@users.noreply.github.com> Date: Wed, 24 Sep 2025 20:37:04 +0200 Subject: [PATCH] Removed support for homework page --- homework/homework.css | 754 ------------------------------------------ homework/homework.js | 712 --------------------------------------- i18n/en.json | 1 - i18n/hu.json | 1 - icons/messages.svg | 1 - manifest.json | 12 - 6 files changed, 1481 deletions(-) delete mode 100644 homework/homework.css delete mode 100644 homework/homework.js delete mode 100644 icons/messages.svg diff --git a/homework/homework.css b/homework/homework.css deleted file mode 100644 index e9ee450..0000000 --- a/homework/homework.css +++ /dev/null @@ -1,754 +0,0 @@ -* { - box-sizing: border-box; - margin: 0; - padding: 0; -} - -body { - margin: 0; - padding: 0; - color: var(--text-primary); - background-color: var(--background) !important; - font-family: "Montserrat", serif !important; - min-height: 100vh; - font-size: 16px; -} - -@media (max-width: 768px) { - body { - font-size: 14px; - } -} - -.kreta-container { - min-height: 100vh; - display: flex; - flex-direction: column; -} - -.kreta-header { - padding: clamp(1rem, 3vw, 2rem); - display: grid; - grid-template-columns: minmax(300px, 400px) 1fr minmax(200px, 300px); - align-items: center; - gap: 1rem; -} - -@media (max-width: 1200px) { - .kreta-header { - grid-template-columns: minmax(250px, 350px) 1fr minmax(180px, 250px); - } -} - -@media (max-width: 768px) { - .kreta-header { - grid-template-columns: 1fr auto auto; - grid-template-areas: - "school toggle user" - "nav nav nav"; - padding: 1rem; - gap: 0.5rem; - } -} - -.school-info { - margin: 0; -} - -@media (max-width: 768px) { - .school-info { - grid-area: school; - max-width: none; - display: flex; - align-items: center; - gap: 0.5rem; - } -} - -.logo-text { - color: var(--text-primary); - font-size: 24px; - font-weight: 600; - margin: 0 0 0.5rem; - display: flex; - align-items: center; -} - -@media (max-width: 768px) { - .logo-text { - margin: 0; - font-size: 20px; - } -} - -.logo { - width: 24px; - border-radius: 8px; - margin-right: 0.5rem; -} - -.school-details { - color: var(--text-secondary); - font-size: 14px; -} - -.school-details span { - display: block; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 300px; -} - -@media (max-width: 768px) { - .school-details span { - max-width: 200px; - } - - .school-details { - font-size: 12px; - } -} - -.user-profile { - position: relative; - justify-self: flex-end; -} - -@media (max-width: 768px) { - .user-profile { - grid-area: user; - } -} - -.user-dropdown-btn { - display: flex; - align-items: center; - gap: 1rem; - background: none; - border: none; - cursor: pointer; - padding: 0.5rem; - color: var(--text-primary); -} - -.user-info { - display: flex; - flex-direction: column; - align-items: flex-end; - gap: 0.25rem; -} - -.user-dropdown { - position: absolute; - top: 100%; - right: 0; - margin-top: 0.5rem; - background: var(--card-card); - border-radius: 12px; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); - width: 200px; - display: none; - z-index: 1000; -} - -.user-dropdown.show { - display: block; - animation: dropdownShow 0.2s ease; -} - -.dropdown-item { - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.75rem 1rem; - color: var(--text-primary); - text-decoration: none; - transition: background-color 0.2s ease; -} - -.dropdown-item:hover { - background-color: var(--accent-15); - text-decoration: none; -} - - -.kreta-main { - flex: 1; - padding: clamp(1rem, 3vw, 2rem); - max-width: 1400px; - margin: 0 auto; - width: 100%; -} - - -.filter-card { - background: var(--card-card); - border-radius: 24px; - padding: 20px; - margin-bottom: 24px; - box-shadow: 0px 1px var(--shadow-blur) 0px var(--accent-shadow); -} - -.filter-header { - margin-bottom: 16px; -} - -.filter-header h2 { - font-size: 18px; - font-weight: 600; - color: var(--text-primary); - background-color: var(--card-card); -} - -/* Checkbox oszlop stílusai */ -.checkbox-header { - width: 50px; - text-align: center; - font-size: 16px; -} - -.checkbox-cell { - width: 50px; - text-align: center; - padding: 8px !important; -} - -.homework-checkbox { - width: 20px; - height: 20px; - cursor: pointer; - appearance: none; - border: 2px solid var(--accent-30); - border-radius: 4px; - background-color: var(--card-card); - position: relative; - transition: all 0.2s ease; - display: flex; - align-items: center; - justify-content: center; -} - -.homework-checkbox:hover { - border-color: var(--accent); - background-color: var(--accent-15); - transform: scale(1.05); -} - -.homework-checkbox:checked { - background-color: var(--accent); - border-color: var(--accent); -} - -.homework-checkbox:checked::after { - content: '✓'; - color: white; - font-size: 14px; - font-weight: bold; - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); -} - -.homework-checkbox:focus { - outline: 2px solid var(--accent); - outline-offset: 2px; -} - -.homework-checkbox:active { - transform: scale(0.95); -} - -/* Megjelölt házi feladatok stílusai */ -.table-row.user-completed { - opacity: 0.6; - background-color: var(--accent-15) !important; -} - -.table-row.user-completed .table-cell { - color: var(--text-secondary); -} - -.table-row.user-completed .status-badge.completed { - background-color: var(--success); - color: white; -} - - - -/* Mobil nézet checkbox stílusai */ -@media (max-width: 768px) { - .checkbox-header { - width: 40px; - font-size: 14px; - } - - .checkbox-cell { - width: 40px; - padding: 6px !important; - } - - .homework-checkbox { - width: 18px; - height: 18px; - } - - .homework-checkbox:checked::after { - font-size: 12px; - } - - .table-row.user-completed { - opacity: 0.7; - } -} - -.filter-content { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 16px; -} - -.filter-group { - display: flex; - flex-direction: column; - gap: 8px; -} - -.filter-group label { - display: flex; - align-items: center; - gap: 8px; - color: var(--text-secondary); - font-size: 14px; -} - -.filter-group select, -.filter-group input { - padding: 10px; - border: none; - border-radius: 8px; - background: var(--button-secondaryFill); - color: var(--text-primary); - font-family: inherit; - font-size: 14px; - transition: all 0.2s ease; -} - -.filter-group select:focus, -.filter-group input:focus { - outline: none; - box-shadow: 0 0 0 2px var(--accent-accent); -} - -.filter-actions { - display: flex; - justify-content: flex-end; - gap: 1rem; - margin-top: 1rem; -} - -.filter-button { - padding: 0.5rem 1rem; - border-radius: 8px; - border: none; - font-family: inherit; - font-weight: 500; - cursor: pointer; - transition: all 0.2s ease; -} - -.filter-button.primary { - background-color: var(--accent-accent); - color: white; -} - -.filter-button.secondary { - background-color: var(--accent-15); - color: var(--text-primary); -} - -.filter-button:hover { - opacity: 0.9; -} - -.stats-overview { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); - gap: 16px; - margin-bottom: 24px; -} - -.stat-card { - background: var(--card-card); - border-radius: 16px; - padding: 20px; - text-align: center; - box-shadow: 0px 1px var(--shadow-blur) 0px var(--accent-shadow); - transition: transform 0.2s ease; -} - -.stat-card:hover { - transform: translateY(-2px); -} - -.stat-number { - font-size: 32px; - font-weight: 700; - color: var(--accent-accent); - margin-bottom: 8px; -} - -.stat-label { - font-size: 14px; - color: var(--text-secondary); - font-weight: 500; -} - -.stat-card.urgent .stat-number { - color: #ff4757; -} - -.stat-card.completed .stat-number { - color: #2ed573; -} - -.homework-container { - background: var(--card-card); - border-radius: 24px; - overflow: hidden; - box-shadow: 0px 1px var(--shadow-blur) 0px var(--accent-shadow); -} - -.homework-table { - width: 100%; - border-collapse: collapse; -} - -.table-header { - background: var(--accent-15); - font-weight: 600; - color: var(--text-primary); -} - -.table-header th { - padding: 16px; - text-align: left; - font-size: 14px; - border-bottom: 1px solid var(--accent-15); -} - -.table-row { - border-bottom: 1px solid var(--accent-15); - transition: background-color 0.2s ease; -} - -.table-row:hover { - background-color: var(--accent-15); -} - -.table-row.due-tomorrow { - background-color: rgba(255, 71, 87, 0.1); -} - -.table-row.due-tomorrow:hover { - background-color: rgba(255, 71, 87, 0.2); -} - -.table-cell { - padding: 16px; - vertical-align: top; - border-bottom: 1px solid var(--accent-15); -} - -.date-cell { - font-weight: 600; - color: var(--text-primary); - min-width: 120px; -} - -.subject-cell { - font-weight: 500; - color: var(--accent-accent); - min-width: 120px; -} - -.description-cell { - max-width: 300px; - word-wrap: break-word; - line-height: 1.4; -} - -.teacher-cell { - color: var(--text-secondary); - font-style: italic; - min-width: 120px; -} - -.status-cell { - text-align: center; - min-width: 100px; -} - -.status-badge { - padding: 4px 12px; - border-radius: 12px; - font-size: 12px; - font-weight: 500; - text-transform: uppercase; -} - -.status-badge.pending { - background-color: rgba(255, 193, 7, 0.2); - color: #ffc107; -} - -.status-badge.urgent { - background-color: rgba(255, 71, 87, 0.2); - color: #ff4757; -} - -.status-badge.completed { - background-color: rgba(46, 213, 115, 0.2); - color: #2ed573; -} - -.homework-list-items { - padding: 16px; - display: flex; - flex-direction: column; - gap: 12px; -} - -.date-header h3 { - font-size: 16px; - font-weight: 600; - color: var(--text-primary); - margin: 0; -} - -.homework-item { - display: flex; - flex-direction: column; - gap: 8px; - padding: 12px; - margin: 0 16px 12px 16px; - background: var(--accent-15); - border-radius: 12px; - transition: transform 0.2s ease; -} - -.homework-item:hover { - transform: translateX(4px); -} - -.homework-item.due-tomorrow { - background: var(--accent-accent); - color: white; -} - -.homework-item.due-tomorrow .homework-subject, -.homework-item.due-tomorrow .homework-content, -.homework-item.due-tomorrow .homework-teacher { - color: white; -} - -.homework-details { - display: flex; - flex-direction: column; - gap: 4px; -} - -.homework-subject { - font-weight: 600; - font-size: 16px; - color: var(--text-primary); - margin-bottom: 4px; -} - -.homework-content { - color: var(--text-primary); - font-size: 14px; - margin-bottom: 8px; - line-height: 1.4; - word-wrap: break-word; - overflow-wrap: break-word; - white-space: pre-wrap; -} - -.homework-teacher { - color: var(--text-secondary); - font-size: 12px; - font-style: italic; -} - - - -.empty-state { - text-align: center; - padding: 2rem; - color: var(--text-secondary); - display: none; - background: var(--card-card); - border-radius: 24px; - box-shadow: 0px 1px var(--shadow-blur) 0px var(--accent-shadow); -} - -.empty-state p { - margin-bottom: 1rem; - font-size: 16px; -} - - -@media (max-width: 768px) { - .filter-content { - grid-template-columns: 1fr; - } - - .homework-header { - flex-direction: column; - gap: 0.25rem; - } - - .stats-overview { - grid-template-columns: repeat(2, 1fr); - } - - .table-cell { - padding: 12px; - font-size: 14px; - } - - .description-cell { - max-width: 200px; - } -} - -@media (max-width: 480px) { - .homework-container { - overflow-x: hidden; - } - - .homework-table, - .table-header, - .table-row, - .table-cell { - display: block; - } - - .table-header { - display: none; - } - - .date-group { - margin-bottom: 24px; - } - - .date-group-header { - background: var(--accent-accent); - color: white; - padding: 12px 16px; - font-weight: 600; - font-size: 16px; - border-radius: 12px 12px 0 0; - margin-bottom: 0; - } - - .date-group-content { - background: var(--card-card); - border: 1px solid var(--accent-15); - border-radius: 0 0 12px 12px; - overflow: hidden; - } - - .table-row { - display: block; - width: 100%; - margin-bottom: 0; - padding: 16px; - border-bottom: 1px solid var(--accent-15); - background: var(--card-card); - } - - .table-row:last-child { - border-bottom: none; - } - - .table-cell { - display: flex; - justify-content: space-between; - align-items: flex-start; - padding: 8px 0; - border-bottom: 1px solid var(--accent-15); - } - - .table-cell:last-child { - border-bottom: none; - } - - .table-cell::before { - content: attr(data-label); - font-weight: 600; - color: var(--text-secondary); - font-size: 12px; - text-transform: uppercase; - flex-shrink: 0; - } - - .description-cell { - max-width: none; - white-space: normal; - text-overflow: initial; - overflow: visible; - text-align: right; - flex: 1; - } - - .stats-overview { - grid-template-columns: 1fr; - } -} - -@keyframes fadeIn { - from { - opacity: 0; - transform: translateY(-10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes dropdownShow { - from { - opacity: 0; - transform: translateY(-10px); - } - to { - opacity: 1; - transform: translateY(0); - } -} - -@keyframes spin { - to { transform: rotate(360deg); } -} - -::-webkit-scrollbar { - width: clamp(4px, 1vw, 8px); - height: clamp(4px, 1vw, 8px); -} - -::-webkit-scrollbar-track { - background: var(--background); -} - -::-webkit-scrollbar-thumb { - background: var(--text-secondary); - border-radius: 4px; -} - -::-webkit-scrollbar-thumb:hover { - background: var(--text-primary); -} \ No newline at end of file diff --git a/homework/homework.js b/homework/homework.js deleted file mode 100644 index 135f832..0000000 --- a/homework/homework.js +++ /dev/null @@ -1,712 +0,0 @@ -async function fetchHomeworkData() { - try { - const currentDomain = window.location.hostname; - const apiUrl = `https://${currentDomain}/api/TanuloHaziFeladatApi/GetTanulotHaziFeladatGrid?sort=HaziFeladatHatarido-asc&page=1&pageSize=100&group=&filter=&data=%7B%22RegiHaziFeladatokElrejtese%22%3Afalse%7D&_=${Date.now()}`; - - const response = await fetch(apiUrl, { - method: "GET", - credentials: "include", - headers: { - Accept: "application/json", - "Content-Type": "application/json", - }, - }); - - if (!response.ok) { - throw new Error("Network response was not ok"); - } - - const data = await response.json(); - return data; - } catch (error) { - console.error("Error fetching homework data:", error); - return { Data: [], Total: 0 }; - } -} - -async function collectHomeworkData() { - const apiData = await fetchHomeworkData(); - - const basicData = { - schoolInfo: { - name: await storageManager.get("schoolName", "OM azonosító - Iskola neve"), - id: await storageManager.get("schoolCode", ""), - }, - userData: { - name: await storageManager.get("userName", "Felhasználónév"), - time: - document.querySelector(".usermenu_timer")?.textContent?.trim() || - "45:00", - }, - }; - - const homeworkItems = []; - - if (apiData.Data && Array.isArray(apiData.Data)) { - apiData.Data.forEach((item) => { - homeworkItems.push({ - id: item.ID, - subject: item.TantargyNev || "", - teacher: item.TanarNeve || "", - description: item.HaziFeladatSzoveg || "", - createdDate: formatApiDate(item.HaziFeladatRogzitesDatuma), - deadline: formatApiDate(item.HaziFeladatHatarido), - completed: item.MegoldottHF_BOOL || false, - classGroup: item.OsztalyCsoport || "", - }); - }); - } - - const groupedHomework = {}; - homeworkItems.forEach((homework) => { - const deadlineDate = homework.deadline.split(" ")[0]; - if (!groupedHomework[deadlineDate]) { - groupedHomework[deadlineDate] = []; - } - groupedHomework[deadlineDate].push(homework); - }); - - return { basicData, homeworkItems, groupedHomework }; -} - -function formatApiDate(dateString) { - if (!dateString) return ""; - - try { - const date = new Date(dateString); - const month = String(date.getMonth() + 1).padStart(2, "0"); - const day = String(date.getDate()).padStart(2, "0"); - - const dayNames = [ - LanguageManager.t("common.sunday"), - LanguageManager.t("common.monday"), - LanguageManager.t("common.tuesday"), - LanguageManager.t("common.wednesday"), - LanguageManager.t("common.thursday"), - LanguageManager.t("common.friday"), - LanguageManager.t("common.saturday"), - ]; - const dayName = dayNames[date.getDay()]; - - return `${month}.${day}. (${dayName})`; - } catch (error) { - return dateString; - } -} - -function isTomorrow(dateStr) { - if (!dateStr) return false; - - const parts = dateStr.split("."); - if (parts.length < 3) return false; - - const year = parseInt(parts[0].trim()); - const month = parseInt(parts[1].trim()) - 1; - const day = parseInt(parts[2].trim()); - - const homeworkDate = new Date(year, month, day); - - const tomorrow = new Date(); - tomorrow.setDate(tomorrow.getDate() + 1); - tomorrow.setHours(0, 0, 0, 0); - - const dayAfterTomorrow = new Date(tomorrow); - dayAfterTomorrow.setDate(dayAfterTomorrow.getDate() + 1); - - return homeworkDate >= tomorrow && homeworkDate < dayAfterTomorrow; -} - -async function transformHomeworkPage() { - const { basicData, homeworkItems, groupedHomework } = - await collectHomeworkData(); - document.body.innerHTML = ''; - const kretaContainer = document.createElement('div'); - kretaContainer.className = 'kreta-container'; - const headerDiv = document.createElement('div'); - const parser = new DOMParser(); - const headerDoc = parser.parseFromString(await createTemplate.header(), 'text/html'); - const headerContent = headerDoc.body; - while (headerContent.firstChild) { - headerDiv.appendChild(headerContent.firstChild); - } - kretaContainer.appendChild(headerDiv); - const main = document.createElement('main'); - main.className = 'kreta-main'; - - const filterCard = document.createElement('div'); - filterCard.className = 'filter-card'; - - const filterHeader = document.createElement('div'); - filterHeader.className = 'filter-header'; - const filterTitle = document.createElement('h2'); - filterTitle.textContent = LanguageManager.t('homework.filter_title'); - filterHeader.appendChild(filterTitle); - - const filterContent = document.createElement('div'); - filterContent.className = 'filter-content'; - - const subjectGroup = document.createElement('div'); - subjectGroup.className = 'filter-group'; - const subjectLabel = document.createElement('label'); - subjectLabel.textContent = LanguageManager.t('homework.subject'); - const subjectSelect = document.createElement('select'); - subjectSelect.id = 'subjectFilter'; - - const allSubjectsOption = document.createElement('option'); - allSubjectsOption.value = ''; - allSubjectsOption.textContent = LanguageManager.t('homework.all_subjects'); - subjectSelect.appendChild(allSubjectsOption); - - [...new Set(homeworkItems.map((item) => item.subject))] - .sort() - .forEach((subject) => { - const option = document.createElement('option'); - option.value = subject; - option.textContent = subject; - subjectSelect.appendChild(option); - }); - - subjectGroup.appendChild(subjectLabel); - subjectGroup.appendChild(subjectSelect); - - const teacherGroup = document.createElement('div'); - teacherGroup.className = 'filter-group'; - const teacherLabel = document.createElement('label'); - teacherLabel.textContent = LanguageManager.t('homework.teacher'); - const teacherSelect = document.createElement('select'); - teacherSelect.id = 'teacherFilter'; - - const allTeachersOption = document.createElement('option'); - allTeachersOption.value = ''; - allTeachersOption.textContent = LanguageManager.t('homework.all_teachers'); - teacherSelect.appendChild(allTeachersOption); - - [...new Set(homeworkItems.map((item) => item.teacher))] - .sort() - .forEach((teacher) => { - const option = document.createElement('option'); - option.value = teacher; - option.textContent = teacher; - teacherSelect.appendChild(option); - }); - - teacherGroup.appendChild(teacherLabel); - teacherGroup.appendChild(teacherSelect); - - const deadlineGroup = document.createElement('div'); - deadlineGroup.className = 'filter-group'; - const deadlineLabel = document.createElement('label'); - deadlineLabel.textContent = LanguageManager.t('homework.due_date'); - const deadlineSelect = document.createElement('select'); - deadlineSelect.id = 'deadlineFilter'; - - const deadlineOptions = [ - { value: '', text: LanguageManager.t('homework.all_deadlines') }, - { value: 'tomorrow', text: LanguageManager.t('homework.tomorrow_deadline') }, - { value: 'thisWeek', text: LanguageManager.t('homework.this_week') }, - { value: 'nextWeek', text: LanguageManager.t('homework.next_week') } - ]; - - deadlineOptions.forEach(({ value, text }) => { - const option = document.createElement('option'); - option.value = value; - option.textContent = text; - deadlineSelect.appendChild(option); - }); - - deadlineGroup.appendChild(deadlineLabel); - deadlineGroup.appendChild(deadlineSelect); - - filterContent.appendChild(subjectGroup); - filterContent.appendChild(teacherGroup); - filterContent.appendChild(deadlineGroup); - - filterCard.appendChild(filterHeader); - filterCard.appendChild(filterContent); - - const statsOverview = document.createElement('div'); - statsOverview.className = 'stats-overview'; - statsOverview.id = 'statsOverview'; - - const statCards = [ - { id: 'totalHomework', label: LanguageManager.t('homework.total_homework'), className: '' }, - { id: 'urgentHomework', label: LanguageManager.t('homework.urgent_homework'), className: 'urgent' }, - { id: 'completedHomework', label: LanguageManager.t('homework.completed_homework'), className: 'completed' }, - { id: 'pendingHomework', label: LanguageManager.t('homework.pending_homework'), className: '' } - ]; - - statCards.forEach(({ id, label, className }) => { - const statCard = document.createElement('div'); - statCard.className = `stat-card ${className}`.trim(); - - const statNumber = document.createElement('div'); - statNumber.className = 'stat-number'; - statNumber.id = id; - statNumber.textContent = '0'; - - const statLabel = document.createElement('div'); - statLabel.className = 'stat-label'; - statLabel.textContent = label; - - statCard.appendChild(statNumber); - statCard.appendChild(statLabel); - statsOverview.appendChild(statCard); - }); - - const homeworkContainer = document.createElement('div'); - homeworkContainer.className = 'homework-container'; - - const homeworkTable = document.createElement('table'); - homeworkTable.className = 'homework-table'; - homeworkTable.id = 'homeworkTable'; - - const thead = document.createElement('thead'); - thead.className = 'table-header'; - const headerRow = document.createElement('tr'); - - const headers = [ - '✓', - LanguageManager.t('homework.due_date'), - LanguageManager.t('homework.subject'), - LanguageManager.t('homework.description'), - LanguageManager.t('homework.teacher'), - LanguageManager.t('homework.status') - ]; - - headers.forEach((headerText, index) => { - const th = document.createElement('th'); - th.textContent = headerText; - if (index === 0) { - th.className = 'checkbox-header'; - } - headerRow.appendChild(th); - }); - - thead.appendChild(headerRow); - - const tbody = document.createElement('tbody'); - tbody.id = 'homeworkTableBody'; - const homeworkHTML = generateHomeworkHTML(homeworkItems); - - if (homeworkHTML.trim()) { - const parser = new DOMParser(); - const doc = parser.parseFromString(`${homeworkHTML}
`, 'text/html'); - const tempTbody = doc.querySelector('tbody'); - while (tempTbody.firstChild) { - tbody.appendChild(tempTbody.firstChild); - } - } else { - const emptyRow = document.createElement('tr'); - const emptyCell = document.createElement('td'); - emptyCell.colSpan = 5; - emptyCell.textContent = LanguageManager.t('homework.no_homework') || 'Nincs házi feladat'; - emptyCell.style.textAlign = 'center'; - emptyCell.style.padding = '20px'; - emptyRow.appendChild(emptyCell); - tbody.appendChild(emptyRow); - } - - homeworkTable.appendChild(thead); - homeworkTable.appendChild(tbody); - homeworkContainer.appendChild(homeworkTable); - - main.appendChild(filterCard); - main.appendChild(statsOverview); - main.appendChild(homeworkContainer); - - kretaContainer.appendChild(main); - document.body.appendChild(kretaContainer); - - setupFilters(homeworkItems, groupedHomework); - setupUserDropdown(); - setupMobileNavigation(); - setupMobileGrouping(); - updateStatistics(); - loadingScreen.hide(); -} - -function generateHomeworkHTML(homeworkItems) { - const sortedHomework = homeworkItems.sort((a, b) => { - const dateA = new Date( - a.deadline.split(" ")[0].split(".").reverse().join("-"), - ); - const dateB = new Date( - b.deadline.split(" ")[0].split(".").reverse().join("-"), - ); - return dateA - dateB; - }); - - return sortedHomework - .map((homework) => { - const isUrgent = isTomorrow(homework.deadline); - const isUserCompleted = getHomeworkCompletionStatus(homework.id); - const status = homework.completed || isUserCompleted - ? "completed" - : isUrgent - ? "urgent" - : "pending"; - const statusText = homework.completed || isUserCompleted - ? LanguageManager.t("homework.completed") - : isUrgent - ? LanguageManager.t("homework.urgent") - : LanguageManager.t("homework.pending"); - - return ` - - - - - ${homework.deadline} - ${homework.subject} - ${homework.description} - ${homework.teacher} - - ${statusText} - - - `; - }) - .join(""); -} - -function formatDateHeader(dateStr) { - if (!dateStr) return ""; - - const today = new Date(); - today.setHours(0, 0, 0, 0); - - const tomorrow = new Date(today); - tomorrow.setDate(tomorrow.getDate() + 1); - - const parts = dateStr.split("."); - if (parts.length < 2) return dateStr; - - const month = parseInt(parts[0].trim()) - 1; - const day = parseInt(parts[1].trim()); - const currentYear = today.getFullYear(); - - const date = new Date(currentYear, month, day); - - if (date.toDateString() === today.toDateString()) { - return LanguageManager.t("common.today") + " - " + dateStr; - } else if (date.toDateString() === tomorrow.toDateString()) { - return LanguageManager.t("common.tomorrow") + " - " + dateStr; - } - - const weekdays = [ - LanguageManager.t("common.sunday"), - LanguageManager.t("common.monday"), - LanguageManager.t("common.tuesday"), - LanguageManager.t("common.wednesday"), - LanguageManager.t("common.thursday"), - LanguageManager.t("common.friday"), - LanguageManager.t("common.saturday"), - ]; - return `${weekdays[date.getDay()]} - ${dateStr}`; -} - -function formatDate(dateStr) { - if (!dateStr) return ""; - return dateStr; -} - -function setupFilters(homeworkItems, groupedHomework) { - const subjectFilter = document.getElementById("subjectFilter"); - const teacherFilter = document.getElementById("teacherFilter"); - const deadlineFilter = document.getElementById("deadlineFilter"); - - const applyFilters = () => { - const selectedSubject = subjectFilter.value; - const selectedTeacher = teacherFilter.value; - const selectedDeadline = deadlineFilter.value; - - const tableRows = document.querySelectorAll(".table-row"); - - tableRows.forEach((row) => { - const subject = row.getAttribute("data-subject"); - const teacher = row.getAttribute("data-teacher"); - const deadline = row.getAttribute("data-deadline"); - - let showRow = true; - - if (selectedSubject && subject !== selectedSubject) { - showRow = false; - } - - if (selectedTeacher && teacher !== selectedTeacher) { - showRow = false; - } - - if (selectedDeadline) { - const parts = deadline.split(" ")[0].split("."); - if (parts.length >= 2) { - const month = parseInt(parts[0].trim()) - 1; - const day = parseInt(parts[1].trim()); - const currentYear = new Date().getFullYear(); - const date = new Date(currentYear, month, day); - - const today = new Date(); - today.setHours(0, 0, 0, 0); - - const tomorrow = new Date(today); - tomorrow.setDate(tomorrow.getDate() + 1); - - const startOfWeek = new Date(today); - const dayOfWeek = today.getDay() || 7; - startOfWeek.setDate(today.getDate() - dayOfWeek + 1); - - const endOfWeek = new Date(startOfWeek); - endOfWeek.setDate(startOfWeek.getDate() + 6); - - const startOfNextWeek = new Date(endOfWeek); - startOfNextWeek.setDate(endOfWeek.getDate() + 1); - - const endOfNextWeek = new Date(startOfNextWeek); - endOfNextWeek.setDate(startOfNextWeek.getDate() + 6); - - if ( - selectedDeadline === "tomorrow" && - date.toDateString() !== tomorrow.toDateString() - ) { - showRow = false; - } else if ( - selectedDeadline === "thisWeek" && - (date < startOfWeek || date > endOfWeek) - ) { - showRow = false; - } else if ( - selectedDeadline === "nextWeek" && - (date < startOfNextWeek || date > endOfNextWeek) - ) { - showRow = false; - } - } - } - - row.style.display = showRow ? "" : "none"; - }); - - updateDateGroupsVisibility(); - updateStatistics(); - setupHomeworkCheckboxes(); - }; - - subjectFilter.addEventListener("change", applyFilters); - teacherFilter.addEventListener("change", applyFilters); - deadlineFilter.addEventListener("change", applyFilters); -} - -function updateStatistics() { - const visibleRows = document.querySelectorAll( - '.table-row:not([style*="display: none"])', - ); - - let totalCount = 0; - let urgentCount = 0; - let completedCount = 0; - let pendingCount = 0; - - visibleRows.forEach((row) => { - totalCount++; - - if (row.classList.contains("due-tomorrow")) { - urgentCount++; - } - - const statusBadge = row.querySelector(".status-badge"); - if (statusBadge) { - if (statusBadge.classList.contains("completed")) { - completedCount++; - } else if (statusBadge.classList.contains("pending")) { - pendingCount++; - } - } - }); - - document.getElementById("totalHomework").textContent = totalCount; - document.getElementById("urgentHomework").textContent = urgentCount; - document.getElementById("completedHomework").textContent = completedCount; - document.getElementById("pendingHomework").textContent = pendingCount; -} - -function setupMobileGrouping() { - function handleResize() { - if (window.innerWidth <= 480) { - createMobileGroups(); - } else { - removeMobileGroups(); - } - } - - window.addEventListener("resize", handleResize); - handleResize(); -} - -function createMobileGroups() { - const tableBody = document.getElementById("homeworkTableBody"); - const rows = Array.from(tableBody.querySelectorAll(".table-row")); - - if (rows.length === 0) return; - - const groupedByDate = {}; - - rows.forEach((row) => { - const deadline = row.getAttribute("data-deadline"); - const dateKey = deadline.split(" ")[0]; - - if (!groupedByDate[dateKey]) { - groupedByDate[dateKey] = []; - } - groupedByDate[dateKey].push(row); - }); - - tableBody.innerHTML = ""; - - Object.keys(groupedByDate) - .sort() - .forEach((date) => { - const dateGroup = document.createElement("div"); - dateGroup.className = "date-group"; - dateGroup.setAttribute("data-date", date); - - const header = document.createElement("div"); - header.className = "date-group-header"; - header.textContent = formatDateHeader(date); - - const content = document.createElement("div"); - content.className = "date-group-content"; - - groupedByDate[date].forEach((row) => { - content.appendChild(row); - }); - - dateGroup.appendChild(header); - dateGroup.appendChild(content); - tableBody.appendChild(dateGroup); - }); - - setupHomeworkCheckboxes(); -} - -function removeMobileGroups() { - const tableBody = document.getElementById("homeworkTableBody"); - const dateGroups = tableBody.querySelectorAll(".date-group"); - - if (dateGroups.length === 0) return; - - const allRows = []; - dateGroups.forEach((group) => { - const rows = group.querySelectorAll(".table-row"); - rows.forEach((row) => allRows.push(row)); - }); - - tableBody.innerHTML = ""; - allRows.forEach((row) => tableBody.appendChild(row)); - - setupHomeworkCheckboxes(); -} - -function updateDateGroupsVisibility() { - const dateGroups = document.querySelectorAll(".date-group"); - - dateGroups.forEach((group) => { - const visibleRows = group.querySelectorAll( - '.table-row:not([style*="display: none"])', - ); - group.style.display = visibleRows.length > 0 ? "block" : "none"; - }); -} - -async function getHomeworkCompletionStatus(homeworkId) { - const completedHomework = await storageManager.get('completedHomework'); - if (!completedHomework) return false; - - try { - const completedList = JSON.parse(completedHomework); - return completedList.includes(homeworkId.toString()); - } catch (error) { - console.error('Error parsing completed homework storage:', error); - return false; - } -} - -async function setHomeworkCompletionStatus(homeworkId, isCompleted) { - let completedHomework = await storageManager.get('completedHomework'); - let completedList = []; - - if (completedHomework) { - try { - completedList = JSON.parse(completedHomework); - } catch (error) { - console.error('Error parsing completed homework storage:', error); - completedList = []; - } - } - - const homeworkIdStr = homeworkId.toString(); - - if (isCompleted) { - if (!completedList.includes(homeworkIdStr)) { - completedList.push(homeworkIdStr); - } - } else { - completedList = completedList.filter(id => id !== homeworkIdStr); - } - - await storageManager.set('completedHomework', JSON.stringify(completedList)); -} - -function setupHomeworkCheckboxes() { - const checkboxes = document.querySelectorAll('.homework-checkbox'); - - checkboxes.forEach(checkbox => { - checkbox.addEventListener('change', function() { - const homeworkId = this.getAttribute('data-homework-id'); - const isChecked = this.checked; - const row = this.closest('.table-row'); - setHomeworkCompletionStatus(homeworkId, isChecked); - - if (isChecked) { - row.classList.add('user-completed'); - this.title = 'Megcsinált házi - kattints a visszaállításhoz'; - } else { - row.classList.remove('user-completed'); - this.title = 'Kattints a megjelöléshez'; - } - - const statusBadge = row.querySelector('.status-badge'); - if (statusBadge) { - if (isChecked) { - statusBadge.className = 'status-badge completed'; - statusBadge.textContent = LanguageManager.t('homework.completed'); - } else { - const isUrgent = row.classList.contains('due-tomorrow'); - if (isUrgent) { - statusBadge.className = 'status-badge urgent'; - statusBadge.textContent = LanguageManager.t('homework.urgent'); - } else { - statusBadge.className = 'status-badge pending'; - statusBadge.textContent = LanguageManager.t('homework.pending'); - } - } - } - - updateStatistics(); - }); - }); -} - -if (window.location.href.includes("/Tanulo/TanuloHaziFeladat")) { - transformHomeworkPage().then(() => { - setupHomeworkCheckboxes(); - }).catch((error) => { - console.error("Error transforming homework page:", error); - }); -} diff --git a/i18n/en.json b/i18n/en.json index e556e42..10a6915 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -67,7 +67,6 @@ "grades": "Grades", "homework": "Homework", "absences": "Absences", - "other": "Other", "messages": "Messages", "profile": "Profile", "settings": "Settings", diff --git a/i18n/hu.json b/i18n/hu.json index 4d2e7a4..1f73c72 100644 --- a/i18n/hu.json +++ b/i18n/hu.json @@ -69,7 +69,6 @@ "grades": "Jegyek", "homework": "Házi feladatok", "absences": "Mulasztások", - "other": "Egyéb", "messages": "Üzenetek", "profile": "Profil", "settings": "Beállítások", diff --git a/icons/messages.svg b/icons/messages.svg deleted file mode 100644 index bd5d6d5..0000000 --- a/icons/messages.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/manifest.json b/manifest.json index 13fa54b..7ed71f7 100644 --- a/manifest.json +++ b/manifest.json @@ -189,18 +189,6 @@ ], "run_at": "document_end" }, - { - "matches": [ - "https://*.e-kreta.hu/Tanulo/TanuloHaziFeladat*" - ], - "js": [ - "homework/homework.js" - ], - "css": [ - "homework/homework.css" - ], - "run_at": "document_end" - }, { "matches": [ "https://*.e-kreta.hu/Adminisztracio/ElfelejtettJelszo*"