Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"mcpServers": {
"svelte": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@sveltejs/mcp"
],
"env": {}
}
}
}
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ android {
applicationId "app.aristomate.gr"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion 35
versionCode 60
versionName '2.1.8 Lonely'
versionCode 62
versionName '2.1.10 Flying Whales'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
// Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps.
Expand Down
4 changes: 0 additions & 4 deletions src/lib/components/calendar/CalendarGrid.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,6 @@
transition: background 0.15s ease;
font-weight: 500;
}
.header .month-title {
background: var(--ion-color-light);
}

.header ion-icon {
font-size: 1.15rem;
Expand Down Expand Up @@ -200,7 +197,6 @@
gap: 0.15rem;
}
.day.selectable {
background: var(--ion-color-light);
cursor: pointer;
transform: scale(1.05);
}
Expand Down
12 changes: 5 additions & 7 deletions src/lib/components/grades/chips.svelte
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
<script lang="ts">
export let coursesBySemester: any = {};
export let semesterId: any = {};

import { getSemester } from '$components/courses/getSemester';
import { t, getLocale } from '$lib/i18n';
import type { course } from '$lib/types/courseType';

export let coursesBySemester: { [key: string]: course[] } = {};
let semesterId = '';

/**
* @param {string} semId
*/
function handleClick(semId: string) {
semesterId = semId;
const element = document.getElementById(semesterId);
Expand Down Expand Up @@ -59,4 +57,4 @@
color: var(--app-color-primary-dark);
}

</style>
</style>
90 changes: 90 additions & 0 deletions src/lib/components/grades/courseRow.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
<script lang="ts">
import { t } from '$lib/i18n';

interface CourseDetails {
courseTitle: string;
formattedGrade: string;
grade: number;
registrationType: number;
examPeriod: { name: string } | null;
gradeYear: { name: string } | null;
}

export let course: CourseDetails;
</script>

<div class="containerFlex">
<div class="titlesFlex">
<ion-label class="ion-text-wrap courseTitle">{course.courseTitle}</ion-label>

{#if course.examPeriod != null}
<ion-label class="examPeriod">
{#if course.examPeriod && course.gradeYear}
{course.examPeriod.name} {course.gradeYear.name}
{:else if course.registrationType === 1}
{$t('progress.exempted')}
{:else}
{$t('progress.declared')}
{/if}
</ion-label>
{:else}
<ion-label class="examPeriod">-</ion-label>
{/if}
</div>
{#if course.grade != null && !isNaN(course.grade)}
{#if course.grade * 10 >= 5}
<ion-text class="success gradeNumber">
<h2>{course.formattedGrade}</h2>
</ion-text>
{:else}
<ion-text class="danger gradeNumber">
<h2>{course.formattedGrade}</h2>
</ion-text>
{/if}
{/if}
</div>

<style>
.containerFlex {
display: flex;
align-items: center;
justify-content: space-between;
min-width: 100%;
padding: 0.5rem;
}

.titlesFlex {
display: flex;
flex-direction: column;
align-items: start;
}

.courseTitle {
font-size: 1rem;
margin-right: 0.5rem;
}

.examPeriod {
font-size: 0.8rem;
color: grey;
}

.success {
color: var(--app-color-green-dark);
}

.danger {
color: var(--app-color-orange-dark);
}

.gradeNumber h2 {
margin: 0 !important;
margin-right: -0.5rem !important;
margin-left: 0.5rem !important;
}

h2 {
font-size: 1.5rem;
font-weight: bold;
}
</style>
169 changes: 12 additions & 157 deletions src/lib/components/grades/gradeCard.svelte
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
<script lang="ts">
export let filteredSubjects: any = {};
export let semesterId: any = {};
export let semesterAverage: any = {};
export let semesterName: string;
import type { course } from '$lib/types/courseType';
import AppCard from '$shared/AppCard.svelte';
import * as allIonicIcons from 'ionicons/icons';
import Course from '$components/courses/coursePage.svelte';
import CourseRow from './courseRow.svelte';
import { navController } from '$components/shared/StackedNav';
import { getSemester } from '$components/courses/getSemester';
import { t, getLocale } from '$lib/i18n';

export let filteredSubjects: course[] = [];
export let semesterId: string;
export let semesterAverage: string;
export let semesterName: string;

let childrenOpen: boolean[] = [];

function toggleChildren(index: number) {
childrenOpen[index] = !childrenOpen[index];
}

export function navigateToCourse(course: { childCourses: string | any[]; id: any }) {
function navigateToCourse(course: course) {
if (!(course.childCourses && course.childCourses.length > 0))
navController.push(Course, { id: course.course });
}
Expand All @@ -27,7 +30,7 @@
<div class="container">
{#if filteredSubjects.length > 0}
<div class="ion-padding-start ion-padding-vertical semester">
{#if semesterId <= 24}
{#if Number(semesterId) <= 24}
<ion-text class="title"
><b>{getSemester(semesterId, getLocale())} {$t('progress.semester')}</b
></ion-text
Expand Down Expand Up @@ -56,73 +59,11 @@
lines="none"
class="ion-no-padding"
>
<div class="containerFlex">
<div class="titlesFlex">
<ion-label class="ion-text-wrap courseTitle"
>{course.courseTitle}</ion-label
>

{#if course.examPeriod !== null}
<ion-label class="examPeriod">
{#if course.examPeriod && course.gradeYear}
{course.examPeriod.name} {course.gradeYear.name}
{:else if course.registrationType === 1}
{$t('progress.exempted')}
{:else}
{$t('progress.declared')}
{/if}
</ion-label>
{:else}
<ion-label class="examPeriod">-</ion-label>
{/if}
</div>
{#if course.grade !== null && !isNaN(course.grade)}
{#if course.grade * 10 >= 5}
<ion-text class="success gradeNumber">
<h2>{course.formattedGrade}</h2>
</ion-text>
{:else}
<ion-text class="danger gradeNumber">
<h2>{course.formattedGrade}</h2>
</ion-text>
{/if}
{/if}
</div>
<CourseRow {course} />
</ion-item>
{:else}
<ion-item lines="none" class="ion-no-padding">
<div class="containerFlex">
<div class="titlesFlex">
<ion-label class="ion-text-wrap courseTitle"
>{course.courseTitle}</ion-label
>

{#if course.examPeriod !== null}
<ion-label class="examPeriod">
{#if course.examPeriod && course.gradeYear}
{course.examPeriod.name} {course.gradeYear.name}
{:else if course.registrationType === 1}
{$t('progress.exempted')}
{:else}
{$t('progress.declared')}
{/if}
</ion-label>
{:else}
<ion-label class="examPeriod">-</ion-label>
{/if}
</div>
{#if course.grade !== null && !isNaN(course.grade)}
{#if course.grade * 10 >= 5}
<ion-text class="success gradeNumber">
<h2>{course.formattedGrade}</h2>
</ion-text>
{:else}
<ion-text class="danger gradeNumber">
<h2>{course.formattedGrade}</h2>
</ion-text>
{/if}
{/if}
</div>
<CourseRow {course} />
</ion-item>
{/if}

Expand All @@ -137,38 +78,7 @@
lines="none"
class="ion-no-padding"
>
<div class="containerFlex">
<div class="titlesFlex">
<ion-label class="ion-text-wrap courseTitle"
>{childCourse.courseTitle}</ion-label
>
{#if childCourse.examPeriod !== null}
<ion-label class="examPeriod">
{#if childCourse.examPeriod && childCourse.gradeYear}
{childCourse.examPeriod.name}
{childCourse.gradeYear.name}
{:else if childCourse.registrationType === 1}
{$t('progress.exempted')}
{:else}
{$t('progress.declared')}
{/if}
</ion-label>
{:else}
<ion-label class="examPeriod">-</ion-label>
{/if}
</div>
{#if childCourse.grade !== null && !isNaN(childCourse.grade)}
{#if childCourse.grade * 10 >= 5}
<ion-text class="success gradeNumber">
<h2>{childCourse.formattedGrade}</h2>
</ion-text>
{:else}
<ion-text class="danger gradeNumber">
<h2>{childCourse.formattedGrade}</h2>
</ion-text>
{/if}
{/if}
</div>
<CourseRow course={childCourse} />
</ion-item>
{/each}
</div>
Expand All @@ -192,22 +102,6 @@
min-width: 100%;
}

.gradeNumber h2 {
margin: 0 !important;
margin-right: -0.5rem !important;
margin-left: 0.5rem !important;
}

h2 {
font-size: 1.5rem;
font-weight: bold;
}

.courseTitle {
font-size: 1rem;
margin-right: 0.5rem;
}

.title {
font-size: 1.5rem;
}
Expand All @@ -224,52 +118,13 @@
height: 1rem;
}

.containerFlex {
display: flex;
align-items: center;
justify-content: space-between;
min-width: 100%;
padding: 0.5rem;
/* padding-left: 0.7rem; */
}

.titlesFlex {
display: flex;
flex-direction: column;
align-items: start;
}

.semester {
display: flex;
flex-direction: column;
align-items: start;
gap: 0.5rem !important;
}

.success {
color: var(--app-color-green-dark);
}

.danger {
color: var(--app-color-orange-dark);
}

.examPeriod {
font-size: 0.8rem;
color: grey;
}

.semester {
display: flex;
flex-direction: column;
align-items: start;
gap: 1rem;
}

.examPeriod {
font-size: 0.8rem;
}

.children {
visibility: hidden;
overflow: hidden;
Expand Down
Loading
Loading