Skip to content
This repository has been archived by the owner on Oct 15, 2023. It is now read-only.

Commit

Permalink
Merge branch 'PapillonApp:development' into development
Browse files Browse the repository at this point in the history
  • Loading branch information
Skythrew committed Apr 12, 2023
2 parents 32230fd + dc0ad55 commit f132980
Show file tree
Hide file tree
Showing 6 changed files with 234 additions and 14 deletions.
2 changes: 1 addition & 1 deletion capacitor.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const config: CapacitorConfig = {
sound: "/public/audio/tone.ogg",
},
Keyboard: {
resize: KeyboardResize.None,
resize: KeyboardResize.Ionic,
},
},
/* server: {
Expand Down
56 changes: 49 additions & 7 deletions src/functions/fetch/GetHomeworks.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ function getPronoteHomework(dateFrom, dateTo, forceReload) {
// return cached homework in promise
return new Promise((resolve) => {
let homework = JSON.parse(cacheSearch[0].homework);
resolve(constructPronoteHomework(homework));
resolve(constructPronoteHomework(homework, dateFrom));
});
} else {
// get homework from API
Expand All @@ -126,7 +126,7 @@ function getPronoteHomework(dateFrom, dateTo, forceReload) {
let homeworks = response.data;

// construct homework
homeworks = constructPronoteHomework(homeworks);
homeworks = constructPronoteHomework(homeworks, dateFrom);

// cache response
let cache = JSON.parse(localStorage.getItem('HomeworkCache')) || [];
Expand Down Expand Up @@ -168,7 +168,7 @@ function getPronoteHomework(dateFrom, dateTo, forceReload) {
}

// pronote : construct homework
function constructPronoteHomework(hw) {
function constructPronoteHomework(hw, dateFrom) {
// declaring vars
let homeworkArray = [];

Expand Down Expand Up @@ -225,6 +225,23 @@ function constructPronoteHomework(hw) {
homeworkArray.push(newHomework);
});

// add custom homework
let customHomework = JSON.parse(localStorage.getItem('customHomeworks')) || [];

customHomework.forEach((homework) => {
let homeworkDate = new Date(homework.date);
homeworkDate.setHours(0, 0, 0, 0);

let searchDate = new Date(dateFrom);
searchDate.setHours(0, 0, 0, 0);

// check if homework is in date range
if (homeworkDate.getDate() == searchDate.getDate()) {
// construct homework
homeworkArray.push(homework.homework);
}
});

// return courses
return homeworkArray;
}
Expand Down Expand Up @@ -436,11 +453,36 @@ function constructEDHomework(hw) {

// tick
async function tickHomework(id) {
switch (localStorage.loginService) {
case "pronote":
// return pronote homework
return tickPronoteHomework(id);
// if id starts with "custom_"
if (id[0].startsWith("custom_")) {
// return custom homework
return tickCustomHomework(id[0]);
}
else {
switch (localStorage.loginService) {
case "pronote":
// return pronote homework
return tickPronoteHomework(id);
}
}
}

async function tickCustomHomework(id) {
let customHomeworks = JSON.parse(localStorage.customHomeworks);

// find homework
let homework = customHomeworks.find((homework) => {
return homework.homework.data.id == id;
});

// if homework is found
if (homework) {
// toggle homework.done
homework.homework.data.done = !homework.homework.data.done;
}

// save customHomeworks
localStorage.customHomeworks = JSON.stringify(customHomeworks);
}

// tick pronote homework
Expand Down
4 changes: 4 additions & 0 deletions src/theme/fixes.css
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,8 @@ ion-content::part(scroll) {

ion-list-header ion-button {
margin-top: 1px !important;
}

.md ion-list {
padding: 0 !important;
}
9 changes: 9 additions & 0 deletions src/theme/theme.css
Original file line number Diff line number Diff line change
Expand Up @@ -516,3 +516,12 @@ ion-alert.md .btn_secondary {
a.inherit {
color: inherit;
}

.md .alert-input-group {
padding: 0px 24px;
}

.md .alert-input {
border-radius: 0;
font-size: 16px;
}
47 changes: 45 additions & 2 deletions src/views/homework/HomeworkItemView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
IonItem,
IonLabel,
IonButtons,
IonButton,
IonTitle,
IonContent
} from '@ionic/vue';
Expand All @@ -23,6 +24,7 @@
IonHeader,
IonToolbar,
IonButtons,
IonButton,
PapillonBackButton,
IonTitle,
IonContent,
Expand All @@ -42,6 +44,8 @@
openedData: [],
openedHomework: [],
openedFiles: [],
custom: false,
deleted: false,
}
},
methods: {
Expand All @@ -51,6 +55,22 @@
presentationStyle: 'popover',
});
},
async deleteHW(e) {
let customHomeworks = JSON.parse(localStorage.customHomeworks);
// find homework
let homework = customHomeworks.find((homework) => {
return homework.homework.data.id == this.openedData.id;
});
// remove homework
customHomeworks.splice(customHomeworks.indexOf(homework), 1);
// save customHomeworks
localStorage.customHomeworks = JSON.stringify(customHomeworks);
this.deleted = true;
}
},
mounted() {
// if urlHw prop is set
Expand All @@ -68,6 +88,11 @@
this.openedData = parsed.data;
this.openedHomework = parsed.homework;
this.openedFiles = parsed.files;
// if parsed.data.id starts with "custom"
if(parsed.data.id.startsWith("custom")) {
this.custom = true;
}
}
return false;
Expand All @@ -78,16 +103,34 @@
<template>
<IonHeader class="AppHeader" translucent>
<IonToolbar>

<ion-buttons slot="start">
<PapillonBackButton></PapillonBackButton>
</ion-buttons>

<ion-title mode="md">Travail à faire <span v-if="openedHomework">en {{ openedHomework.subject }}</span></ion-title>
<ion-title mode="md" v-if="openedHomework && custom">Devoir personnalisé</ion-title>
<ion-title mode="md" v-else>Travail à faire <span v-if="openedHomework">en {{ openedHomework.subject }}</span></ion-title>

<ion-buttons slot="end">
<ion-button v-if="custom" color="danger" @click="deleteHW($event)">
<span slot="start" class="material-symbols-outlined mdls">delete</span>
Supprimer
</ion-button>
</ion-buttons>
</IonToolbar>
</IonHeader>

<ion-content :fullscreen="true">
<IonList inset v-if="deleted">
<IonItem color="danger">
<span class="material-symbols-outlined mdls" slot="start">delete</span>

<IonLabel>
<h2>Ce devoir à été supprimé</h2>
<p>Vous consultez une archive de ce devoir.</p>
</IonLabel>
</IonItem>
</IonList>

<div v-if="openedHw">
<div class="content" v-html="openedHomework.content"></div>
</div>
Expand Down
130 changes: 126 additions & 4 deletions src/views/homework/HomeworkView.vue
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script>
import { defineComponent } from 'vue';
import { IonHeader, IonContent, IonToolbar, IonTitle, IonMenuButton, IonPage, IonButtons, IonList, IonLabel, IonItem, IonNavLink, IonRefresher, IonRefresherContent, IonCheckbox, IonButton, IonModal, IonDatetime } from '@ionic/vue';
import { IonHeader, IonFooter, IonContent, IonToolbar, IonTitle, IonMenuButton, IonPage, IonButtons, IonList, IonLabel, IonItem, IonNavLink, IonRefresher, IonRefresherContent, IonCheckbox, IonButton, IonModal, IonDatetime, alertController } from '@ionic/vue';
import { alertCircle } from 'ionicons/icons';
Expand Down Expand Up @@ -69,6 +69,90 @@
}
},
methods: {
async addHomework(e) {
const alert = await alertController.create({
header: 'Ajouter un devoir',
subHeader: 'Entrez ici le contenu de votre devoir',
inputs: [
{
name: 'subject',
type: 'input',
placeholder: 'Matière (optionnel)'
},
{
name: 'content',
type: 'textarea',
placeholder: 'Contenu du devoir'
},
],
buttons: [
{
text: 'Annuler',
role: 'cancel',
},
{
text: 'Ajouter',
handler: async (data) => {
let text = data.content;
let subject = data.subject;
if (!subject) {
subject = "DEVOIR PERSONNALISÉ"
}
if (!text) {
return;
}
// get --ion-color-primary
let color = getComputedStyle(document.documentElement).getPropertyValue('--ion-color-primary');
// get homework description
let shortText = text;
if (shortText.length > 80) {
shortText = shortText.substring(0, 80) + '...';
}
let newHomework = {
data: {
id: "custom_" + Math.random().toString(36).substr(2, 9),
date: this.$rn.toISOString().split('T')[0].replace(/-/g, "/") + " 00:00",
color: color,
done: false,
},
homework: {
subject: subject.toUpperCase(),
content: text,
shortContent: shortText,
},
files: [],
};
// add homework to homeworks
let customHomeworks = [];
if (localStorage.customHomeworks) {
customHomeworks = JSON.parse(localStorage.customHomeworks);
}
customHomeworks.push({
date: this.$rn,
homework: newHomework
})
localStorage.customHomeworks = JSON.stringify(customHomeworks);
// refresh homeworks
this.handleRefresh();
}
}
],
mode: 'md'
});
await alert.present();
},
isED() {
return localStorage.loginService === 'ecoledirecte'
},
Expand Down Expand Up @@ -311,9 +395,8 @@
v-for="(slideContent, index) in slides"
:key="index"
:virtualIndex="index">

<IonList>
<IonItem button v-for="homework in days[`${index}`]" :key="homework.id">
<IonList v-for="homework in days[`${index}`]" :key="homework.id" inset class="hwListItem">
<IonItem button >
<div slot="start">
<ion-checkbox :id="`checkbox_${homework.data.id}`" :checked="homework.data.done" @ionChange="changeDone(homework)"></ion-checkbox>
</div>
Expand All @@ -323,6 +406,10 @@
<p><span class="courseColor"></span> {{ homework.homework.subject }}</p>
<h5 v-if="isED()" v-html="homework.homework.shortContent" class="hwContent"></h5>
<h5 v-else class="hwContent">{{ homework.homework.shortContent }}</h5>

<p v-if="homework.files.length > 0">
<span>{{ homework.files[0].name }}</span>
</p>
</IonLabel>
</IonNavLink>
</IonItem>
Expand Down Expand Up @@ -355,6 +442,18 @@
</div>
</div>

<IonList inset class="hwListItem add">
<IonItem button detail="false" @click="addHomework($event)">
<span class="material-symbols-outlined mdls" slot="start">add</span>
<IonNavLink class="navLink" router-direction="forward" :component="AddHomeworkView">
<IonLabel>
<h2>Ajouter un devoir</h2>
<p>Ajouter un devoir manuellement</p>
</IonLabel>
</IonNavLink>
</IonItem>
</IonList>

</swiper-slide>
</swiper>

Expand Down Expand Up @@ -431,5 +530,28 @@
.navLink {
margin: 10px 0px;
width: 100%;
}
.hwListItem {
margin: 6px 12px;
}
.hwContent {
font-weight: 500;
}
.hwListItem.add {
box-shadow: none !important;
background: transparent !important;
}
.hwListItem.add ion-item::part(native) {
border: 1px solid var(--ion-color-step-50) !important;
--background: transparent !important;
}
.ios .hwListItem.add ion-item::part(native) {
border-radius: 12px !important;
}
</style>

0 comments on commit f132980

Please sign in to comment.