${generateSubjectCards(data.subjects)}
@@ -270,6 +402,21 @@
return semesterGrades;
}
+ function extractYearEndGrades(subjects) {
+ const yearEndGrades = [];
+ subjects.forEach(subject => {
+ const yearEndGrade = subject.grades.find(grade => grade.isYearEndGrade);
+ if (yearEndGrade) {
+ yearEndGrades.push({
+ subject: subject.name,
+ value: yearEndGrade.value,
+ date: yearEndGrade.date
+ });
+ }
+ });
+ return yearEndGrades;
+ }
+
function calculateGradePoints(subjects) {
const allGrades = [];
@@ -278,7 +425,7 @@
const date = new Date(grade.date);
const value = parseInt(grade.value);
const weight = parseInt(grade.weight?.match(/\d+/)?.[0] || '100') / 100;
- if (date && value && weight) {
+ if (date && value && weight && !grade.value.includes('%')) {
allGrades.push({
date,
value,
diff --git a/homework/homework.css b/homework/homework.css
index 376ff6e..b6746fe 100644
--- a/homework/homework.css
+++ b/homework/homework.css
@@ -184,13 +184,13 @@ body {
.filter-card {
background: var(--card-card);
border-radius: 24px;
- padding: 1.5rem;
- margin-bottom: 1.5rem;
- box-shadow: 0px 1px 3px 0px var(--accent-shadow);
+ padding: 20px;
+ margin-bottom: 24px;
+ box-shadow: 0px 1px var(--shadow-blur) 0px var(--accent-shadow);
}
.filter-header {
- margin-bottom: 1rem;
+ margin-bottom: 16px;
}
.filter-header h2 {
@@ -202,43 +202,40 @@ body {
.filter-content {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
- gap: 1rem;
- width: 100%;
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+ gap: 16px;
}
.filter-group {
display: flex;
flex-direction: column;
- gap: 0.5rem;
+ gap: 8px;
}
.filter-group label {
display: flex;
align-items: center;
- gap: 0.5rem;
- font-size: 14px;
+ gap: 8px;
color: var(--text-secondary);
+ font-size: 14px;
}
.filter-group select,
.filter-group input {
- padding: 0.75rem;
- border-radius: 12px;
- border: 1px solid var(--accent-15);
- background-color: var(--background);
+ padding: 10px;
+ border: none;
+ border-radius: 8px;
+ background: var(--button-secondaryFill);
color: var(--text-primary);
font-family: inherit;
font-size: 14px;
- width: 100%;
- transition: border-color 0.2s ease, box-shadow 0.2s ease;
+ transition: all 0.2s ease;
}
.filter-group select:focus,
.filter-group input:focus {
outline: none;
- border-color: var(--accent-accent);
- box-shadow: 0 0 0 2px var(--accent-15);
+ box-shadow: 0 0 0 2px var(--accent-accent);
}
.filter-actions {
@@ -274,93 +271,116 @@ body {
.homework-list {
- display: grid;
- grid-template-columns: 1fr;
- gap: 1rem;
+ display: flex;
+ flex-direction: column;
+ gap: 16px;
}
.homework-date-group {
- margin-bottom: 2rem;
+ background: var(--card-card);
+ border-radius: 24px;
+ overflow: hidden;
+ animation: fadeIn 0.3s ease;
+ box-shadow: 0px 1px var(--shadow-blur) 0px var(--accent-shadow);
}
.date-header {
+ padding: 16px;
+ color: var(--text-primary);
+ font-weight: 600;
display: flex;
align-items: center;
- gap: 0.5rem;
- margin-bottom: 0.5rem;
- padding-bottom: 0.5rem;
- border-bottom: 1px solid var(--accent-15);
+ gap: 8px;
+}
+
+.homework-count {
+ margin-left: auto;
+ background: var(--accent-accent);
+ color: var(--button-secondaryFill);
+ padding: 4px 8px;
+ border-radius: 12px;
+ font-size: 14px;
+}
+
+.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 {
- background: var(--card-card);
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ padding: 12px;
+ margin: 0 16px 12px 16px;
+ background: var(--accent-15);
border-radius: 12px;
- padding: 1rem;
- margin-bottom: 0.5rem;
- box-shadow: 0px 1px 2px 0px var(--accent-shadow);
transition: transform 0.2s ease;
}
.homework-item:hover {
- transform: translateY(-2px);
+ transform: translateX(4px);
}
.homework-item.due-tomorrow {
- border-left: 4px solid var(--accent-accent);
- background-color: var(--accent-5);
+ background: var(--accent-accent);
+ color: white;
}
-.homework-header {
+.homework-item.due-tomorrow .homework-subject,
+.homework-item.due-tomorrow .homework-content,
+.homework-item.due-tomorrow .homework-teacher {
+ color: white;
+}
+
+.homework-details {
display: flex;
- justify-content: space-between;
- margin-bottom: 0.5rem;
+ flex-direction: column;
+ gap: 4px;
}
.homework-subject {
font-weight: 600;
font-size: 16px;
color: var(--text-primary);
-}
-
-.homework-deadline {
- font-size: 14px;
- color: var(--text-secondary);
-}
-
-.homework-deadline.urgent {
- color: var(--accent-accent);
- font-weight: 500;
+ margin-bottom: 4px;
}
.homework-content {
- margin-bottom: 0.5rem;
color: var(--text-primary);
font-size: 14px;
-}
-
-.homework-footer {
- display: flex;
- justify-content: space-between;
- align-items: center;
- font-size: 12px;
- color: var(--text-secondary);
+ 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 {
@@ -380,6 +400,17 @@ body {
}
}
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(-10px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
@keyframes dropdownShow {
from {
opacity: 0;
@@ -389,4 +420,26 @@ body {
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
index 355949d..17ab8f9 100644
--- a/homework/homework.js
+++ b/homework/homework.js
@@ -221,24 +221,24 @@ function renderHomeworkList(groupedHomework) {
- ${homeworkItems.map(homework => {
- const isTomorrowClass = isTomorrow(homework.deadline) ? 'due-tomorrow' : '';
- const urgentClass = isTomorrow(homework.deadline) ? 'urgent' : '';
-
- return `
-
-
`;
}).join('');
@@ -285,14 +285,6 @@ function formatDate(dateStr) {
return dateStr;
}
-function formatHomeworkDescription(description) {
- if (!description) return '';
-
- description = description.replace(/\n/g, '
');
-
- return description;
-}
-
function setupFilters(homeworkItems, groupedHomework) {
const subjectFilter = document.getElementById('subjectFilter');
const teacherFilter = document.getElementById('teacherFilter');
diff --git a/i18n/en.json b/i18n/en.json
index fed49fd..a72805a 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -43,6 +43,7 @@
"homework": "Homework",
"absences": "Absences",
"other": "Other",
+ "messages": "Messages",
"profile": "Profile",
"settings": "Settings",
"logout": "Logout",
@@ -130,7 +131,8 @@
"no_homework": "No homework to display.",
"no_filtered_homework": "No homework matching the filter criteria.",
"teacher": "Teacher",
- "no_matching_homework": "No homework matching the filter criteria."
+ "no_matching_homework": "No homework matching the filter criteria.",
+ "items": "items"
},
"absences": {
"title": "Absences",
@@ -146,7 +148,13 @@
"subject": "Subject",
"justification": "Justification",
"hours": "hours",
- "page_transform_error": "An error occurred while transforming the page"
+ "page_transform_error": "An error occurred while transforming the page",
+ "time_period": "Time period",
+ "all_periods": "All periods",
+ "current_month": "Current month",
+ "last_month": "Last month",
+ "current_semester": "Current semester",
+ "last_30_days": "Last 30 days"
},
"profile": {
"title": "Profile",
@@ -315,5 +323,21 @@
"app": {
"title": "Firka - KRÉTA",
"settings_title": "Firka - Settings"
+ },
+ "forgotpassword": {
+ "title": "Forgot Password",
+ "om_id_label": "OM ID",
+ "om_id_placeholder": "Enter your OM ID",
+ "om_id_required": "OM ID is required",
+ "email_label": "Email address",
+ "email_placeholder": "Enter your email address",
+ "email_required": "Email address is required",
+ "back_to_login": "Back to login",
+ "reset_button": "Reset password",
+ "error_message": "An error occurred during password reset",
+ "success_message": "Password reset link sent to your email address",
+ "invalid_data": "Invalid data",
+ "invalid_email": "Invalid email address format",
+ "recaptcha_required": "Please complete the reCAPTCHA"
}
}
\ No newline at end of file
diff --git a/i18n/hu.json b/i18n/hu.json
index 6e6d54b..df1f807 100644
--- a/i18n/hu.json
+++ b/i18n/hu.json
@@ -43,6 +43,7 @@
"homework": "Házi feladatok",
"absences": "Mulasztások",
"other": "Egyéb",
+ "messages": "Üzenetek",
"profile": "Profil",
"settings": "Beállítások",
"logout": "Kijelentkezés",
@@ -130,7 +131,8 @@
"no_homework": "Nincs megjeleníthető házi feladat.",
"no_filtered_homework": "Nincs a szűrési feltételeknek megfelelő házi feladat.",
"teacher": "Tanár",
- "no_matching_homework": "Nincs a szűrési feltételeknek megfelelő házi feladat."
+ "no_matching_homework": "Nincs a szűrési feltételeknek megfelelő házi feladat.",
+ "items": "feladat"
},
"absences": {
"title": "Hiányzások",
@@ -146,7 +148,13 @@
"subject": "Tantárgy",
"justification": "Igazolás",
"hours": "óra",
- "page_transform_error": "Hiba történt az oldal átalakítása során"
+ "page_transform_error": "Hiba történt az oldal átalakítása során",
+ "time_period": "Időszak",
+ "all_periods": "Összes időszak",
+ "current_month": "Aktuális hónap",
+ "last_month": "Előző hónap",
+ "current_semester": "Aktuális félév",
+ "last_30_days": "Utolsó 30 nap"
},
"profile": {
"title": "Profil",
@@ -315,5 +323,21 @@
"app": {
"title": "Firka - KRÉTA",
"settings_title": "Firxa - Beállítások"
+ },
+ "forgotpassword": {
+ "title": "Elfelejtett jelszó",
+ "om_id_label": "OM azonosító",
+ "om_id_placeholder": "Adja meg az OM azonosítóját",
+ "om_id_required": "Az OM azonosító megadása kötelező",
+ "email_label": "E-mail cím",
+ "email_placeholder": "Adja meg az e-mail címét",
+ "email_required": "Az e-mail cím megadása kötelező",
+ "back_to_login": "Vissza a bejelentkezéshez",
+ "reset_button": "Jelszó visszaállítása",
+ "error_message": "Hiba történt a jelszó visszaállítása során",
+ "success_message": "A jelszó visszaállítási link elküldve az e-mail címére",
+ "invalid_data": "Hibás adatok",
+ "invalid_email": "Érvénytelen e-mail cím formátum",
+ "recaptcha_required": "Kérjük, töltse ki a reCAPTCHA-t"
}
}
\ No newline at end of file
diff --git a/icons/messages.svg b/icons/messages.svg
new file mode 100644
index 0000000..bd5d6d5
--- /dev/null
+++ b/icons/messages.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index 9ede34d..4c06ad5 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "Firxa",
- "version": "1.2.2",
+ "version": "1.2.3",
"description": "KRÉTA webes verziójának újraírása",
"icons": {
"128": "images/firka_logo_128.png"
diff --git a/tools/createTemplate.js b/tools/createTemplate.js
index 78a5609..0e917d4 100644
--- a/tools/createTemplate.js
+++ b/tools/createTemplate.js
@@ -67,6 +67,10 @@ const createTemplate = {