Merge pull request #1484 from ae-utbm/edt-msg

show the broken line on timetable parsing error
This commit is contained in:
thomas girod
2026-09-09 07:19:13 +02:00
committed by GitHub
4 changed files with 37 additions and 19 deletions
+12 -1
View File
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-09-04 11:24+0200\n"
"POT-Creation-Date: 2026-09-08 23:36+0200\n"
"PO-Revision-Date: 2016-07-18\n"
"Last-Translator: Maréchal <thomas.girod@utbm.fr\n"
"Language-Team: AE info <ae.info@utbm.fr>\n"
@@ -5852,6 +5852,17 @@ msgstr "les groupes pouvant créer des cotisations"
msgid "Timetable generator"
msgstr "Générateur d'emploi du temps"
#: timetable/templates/timetable/generator.jinja
msgid ""
"Wrong timetable format. Make sure you copied if from your student folder."
msgstr ""
"Mauvais format d'emploi du temps. Assurez-vous que vous l'avez copié depuis "
"votre dossier étudiant."
#: timetable/templates/timetable/generator.jinja
msgid "Incorrect row"
msgstr "Ligne incorrecte"
#: timetable/templates/timetable/generator.jinja
msgid "Generate"
msgstr "Générer"
+3 -9
View File
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-05-17 10:03+0200\n"
"POT-Creation-Date: 2026-09-08 23:36+0200\n"
"PO-Revision-Date: 2024-09-17 11:54+0200\n"
"Last-Translator: Sli <antoine@bartuccio.fr>\n"
"Language-Team: AE info <ae.info@utbm.fr>\n"
@@ -22,8 +22,8 @@ msgid ""
"You're going to remove your own role from the presidency. You may lock "
"yourself out of this page. Do you want to continue ? "
msgstr ""
"Vous vous apprêtez à retirer votre propre rôle de la présidence. Vous risquez "
"de perdre l'accès à cette page. Voulez-vous continuer ?"
"Vous vous apprêtez à retirer votre propre rôle de la présidence. Vous "
"risquez de perdre l'accès à cette page. Voulez-vous continuer ?"
#: com/static/bundled/com/components/ics-calendar-index.ts
msgid "More info"
@@ -279,9 +279,3 @@ msgstr "Il n'a pas été possible de modérer l'image"
msgid "Couldn't delete picture"
msgstr "Il n'a pas été possible de supprimer l'image"
#: timetable/static/bundled/timetable/generator-index.ts
msgid ""
"Wrong timetable format. Make sure you copied if from your student folder."
msgstr ""
"Mauvais format d'emploi du temps. Assurez-vous que vous l'avez copié depuis "
"votre dossier étudiant."
@@ -59,7 +59,7 @@ function parseSlots(s: string): TimetableSlot[] {
.map((row: string) => {
const parsed = TIMETABLE_ROW_RE.exec(row);
if (!parsed?.groups) {
throw new Error(`Couldn't parse row ${row}`);
throw new Error(`Couldn't parse row ${row}`, { cause: { row: row } });
}
const [startHour, startMin] = parsed.groups.startHour
.split(":")
@@ -78,7 +78,7 @@ function parseSlots(s: string): TimetableSlot[] {
document.addEventListener("alpine:init", () => {
Alpine.data("timetableGenerator", () => ({
content: DEFAULT_TIMETABLE,
error: "",
error: null as { incorrectRow?: string },
displayedWeekdays: [] as WeekDay[],
courses: [] as TimetableSlot[],
startSlot: 0,
@@ -106,10 +106,9 @@ document.addEventListener("alpine:init", () => {
generate() {
try {
this.courses = parseSlots(this.content);
} catch {
this.error = gettext(
"Wrong timetable format. Make sure you copied if from your student folder.",
);
this.error = null;
} catch (err) {
this.error = { incorrectRow: err?.cause?.row };
return;
}
+17 -3
View File
@@ -16,9 +16,23 @@
<div x-data="timetableGenerator">
<form @submit.prevent="generate()">
<h1>Générateur d'emploi du temps</h1>
<div class="alert alert-red" x-show="!!error" x-cloak>
<span class="alert-main" x-text="error"></span>
</div>
<template x-if="error !== null" x-cloak>
<div class="alert alert-red">
<div class="alert-main">
<p>
{% trans trimmed %}
Wrong timetable format. Make sure you copied if from your student folder.
{% endtrans %}
</p>
<template x-if="!!error.incorrectRow">
<p>
{% trans %}Incorrect row{% endtrans %} :
<code x-text="error.incorrectRow"></code>
</p>
</template>
</div>
</div>
</template>
<div class="form-group">
<label for="timetable-input">Colle ton emploi du temps (sans l'entête)</label>
<textarea id="timetable-input" cols="30" rows="15" x-model="content"></textarea>