Revert "Melanie ite4"

This commit is contained in:
louis-antoine-etsmtl 2024-04-16 17:12:20 -04:00 committed by GitHub
parent 94935d2a3a
commit 89189ca496
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 51 additions and 113 deletions

View file

@ -137,19 +137,14 @@ const GiftCheatSheet: React.FC = () => {
</div>
<div className="question-type">
<h4> 8. LaTeX et Markdown</h4>
<h4> 8. LaTeX </h4>
<p>
Les format LaTeX et markdown sont supportés dans cette application. Vous devez cependant penser
Le format LaTeX est supporté dans cette application. Vous devez cependant penser
à 'échapper' les caractères spéciaux mentionnés plus haut.
</p>
<p>Exemple d'équation:</p>
<pre>
<code className="question-code-block selectable-text">{'$$x\\= \\frac\\{y^2\\}\\{4\\}$$'}</code>
<code className="question-code-block selectable-text">{'\n$x\\= \\frac\\{y^2\\}\\{4\\}$'}</code>
</pre>
<p>Exemple de texte Markdown:</p>
<pre>
<code className="question-code-block selectable-text">{'[markdown]Grâce à la balise markdown, Il est possible d\'insérer du texte *italique*, **gras**, du `code` et bien plus.'}</code>
<code className="question-code-block">{'$$x\\= \\frac\\{y^2\\}\\{4\\}$$'}</code>
</pre>
</div>

View file

@ -9,7 +9,6 @@ interface TextTypeOptions extends TemplateOptions {
function formatLatex(text: string): string {
return text
.replace(/\$\$(.*?)\$\$/g, (_, inner) => katex.renderToString(inner, { displayMode: true }))
.replace(/\$(.*?)\$/g, (_, inner) => katex.renderToString(inner, { displayMode: false }))
.replace(/\\\[(.*?)\\\]/g, (_, inner) => katex.renderToString(inner, { displayMode: true }))
.replace(/\\\((.*?)\\\)/g, (_, inner) =>
katex.renderToString(inner, { displayMode: false })

View file

@ -1,10 +1,8 @@
// MultipleChoiceQuestion.tsx
import React, { useEffect, useState } from 'react';
import React, { useState } from 'react';
import Latex from 'react-latex';
import '../questionStyle.css';
import { Button } from '@mui/material';
import TextType from '../../GiftTemplate/templates/TextType';
import { TextFormat } from '../../GiftTemplate/templates/types';
import Latex from 'react-latex';
type Choices = {
feedback: { format: string; text: string } | null;
@ -14,7 +12,8 @@ type Choices = {
};
interface Props {
questionContent: TextFormat;
questionTitle: string | null;
questionContent: string;
choices: Choices[];
globalFeedback?: string | undefined;
handleOnSubmitAnswer?: (answer: string) => void;
@ -22,24 +21,22 @@ interface Props {
}
const MultipleChoiceQuestion: React.FC<Props> = (props) => {
const { questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props;
const { questionTitle, questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props;
const [answer, setAnswer] = useState<string>();
useEffect(() => {
setAnswer(undefined);
}, [questionContent]);
const handleOnClickAnswer = (choice: string) => {
setAnswer(choice);
};
const alpha = Array.from(Array(26)).map((_e, i) => i + 65);
const alphabet = alpha.map((x) => String.fromCharCode(x));
return (
<div className="question-container">
<div className="title mb-1 text-center align-h-center">
{questionTitle}
</div>
<div className="question content">
<div dangerouslySetInnerHTML={{ __html: TextType({text: questionContent}) }} />
<Latex>{questionContent}</Latex>
</div>
<div className="choices-wrapper mb-1">
{choices.map((choice, i) => {

View file

@ -1,9 +1,8 @@
// NumericalQuestion.tsx
import React, { useState } from 'react';
import Latex from 'react-latex';
import '../questionStyle.css';
import { Button, TextField } from '@mui/material';
import TextType from '../../GiftTemplate/templates/TextType';
import { TextFormat } from '../../GiftTemplate/templates/types';
type CorrectAnswer = {
numberHigh?: number;
@ -13,7 +12,8 @@ type CorrectAnswer = {
};
interface Props {
questionContent: TextFormat;
questionTitle: string | null;
questionContent: string;
correctAnswers: CorrectAnswer;
globalFeedback?: string | undefined;
handleOnSubmitAnswer?: (answer: number) => void;
@ -21,7 +21,7 @@ interface Props {
}
const NumericalQuestion: React.FC<Props> = (props) => {
const { questionContent, correctAnswers, showAnswer, handleOnSubmitAnswer, globalFeedback } =
const { questionTitle, questionContent, correctAnswers, showAnswer, handleOnSubmitAnswer, globalFeedback } =
props;
const [answer, setAnswer] = useState<number>();
@ -33,8 +33,11 @@ const NumericalQuestion: React.FC<Props> = (props) => {
return (
<div className="question-wrapper">
<div className="title mb-1 text-center center-h-align">
{questionTitle}
</div>
<div>
<div dangerouslySetInnerHTML={{ __html: TextType({text: questionContent}) }} />
<Latex>{questionContent}</Latex>
</div>
{showAnswer ? (
<>
@ -46,8 +49,8 @@ const NumericalQuestion: React.FC<Props> = (props) => {
<div className="answer-wrapper mb-1">
<TextField
type="number"
id={questionContent.text}
name={questionContent.text}
id={questionContent}
name={questionContent}
onChange={(e: React.ChangeEvent<HTMLInputElement>) => {
setAnswer(e.target.valueAsNumber);
}}

View file

@ -30,7 +30,8 @@ const Question: React.FC<QuestionProps> = ({
case 'TF':
questionTypeComponent = (
<TrueFalseQuestion
questionContent={question.stem}
questionTitle={question.title}
questionContent={question.stem.text}
correctAnswer={question.isTrue}
handleOnSubmitAnswer={handleOnSubmitAnswer}
showAnswer={showAnswer}
@ -41,7 +42,8 @@ const Question: React.FC<QuestionProps> = ({
case 'MC':
questionTypeComponent = (
<MultipleChoiceQuestion
questionContent={question.stem}
questionTitle={question.title}
questionContent={question.stem.text}
choices={question.choices}
handleOnSubmitAnswer={handleOnSubmitAnswer}
showAnswer={showAnswer}
@ -54,7 +56,8 @@ const Question: React.FC<QuestionProps> = ({
if (!Array.isArray(question.choices)) {
questionTypeComponent = (
<NumericalQuestion
questionContent={question.stem}
questionTitle={question.title}
questionContent={question.stem.text}
correctAnswers={question.choices}
handleOnSubmitAnswer={handleOnSubmitAnswer}
showAnswer={showAnswer}
@ -64,7 +67,8 @@ const Question: React.FC<QuestionProps> = ({
} else {
questionTypeComponent = (
<NumericalQuestion
questionContent={question.stem}
questionTitle={question.title}
questionContent={question.stem.text}
correctAnswers={question.choices[0].text}
handleOnSubmitAnswer={handleOnSubmitAnswer}
showAnswer={showAnswer}
@ -77,7 +81,8 @@ const Question: React.FC<QuestionProps> = ({
case 'Short':
questionTypeComponent = (
<ShortAnswerQuestion
questionContent={question.stem}
questionTitle={question.title}
questionContent={question.stem.text}
choices={question.choices}
handleOnSubmitAnswer={handleOnSubmitAnswer}
showAnswer={showAnswer}

View file

@ -1,9 +1,8 @@
// ShortAnswerQuestion.tsx
import React, { useState } from 'react';
import Latex from 'react-latex';
import '../questionStyle.css';
import { Button, TextField } from '@mui/material';
import TextType from '../../GiftTemplate/templates/TextType';
import { TextFormat } from '../../GiftTemplate/templates/types';
type Choices = {
feedback: { format: string; text: string } | null;
@ -13,7 +12,8 @@ type Choices = {
};
interface Props {
questionContent: TextFormat;
questionTitle: string | null;
questionContent: string;
choices: Choices[];
globalFeedback?: string | undefined;
handleOnSubmitAnswer?: (answer: string) => void;
@ -21,13 +21,16 @@ interface Props {
}
const ShortAnswerQuestion: React.FC<Props> = (props) => {
const { questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props;
const { questionTitle, questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props;
const [answer, setAnswer] = useState<string>();
return (
<div className="question-wrapper">
<div className="title mb-1 text-center center-h-align">
{questionTitle}
</div>
<div className="question content">
<div dangerouslySetInnerHTML={{ __html: TextType({text: questionContent}) }} />
<Latex>{questionContent}</Latex>
</div>
{showAnswer ? (
<>
@ -43,8 +46,8 @@ const ShortAnswerQuestion: React.FC<Props> = (props) => {
<div className="answer-wrapper mb-1">
<TextField
type="text"
id={questionContent.text}
name={questionContent.text}
id={questionContent}
name={questionContent}
onChange={(e) => {
setAnswer(e.target.value);
}}

View file

@ -1,12 +1,12 @@
// TrueFalseQuestion.tsx
import React, { useState, useEffect } from 'react';
import Latex from 'react-latex';
import '../questionStyle.css';
import { Button } from '@mui/material';
import TextType from '../../GiftTemplate/templates/TextType';
import { TextFormat } from '../../GiftTemplate/templates/types';
interface Props {
questionContent: TextFormat;
questionTitle: string | null;
questionContent: string;
correctAnswer: boolean;
globalFeedback?: string | undefined;
handleOnSubmitAnswer?: (answer: boolean) => void;
@ -14,20 +14,23 @@ interface Props {
}
const TrueFalseQuestion: React.FC<Props> = (props) => {
const { questionContent, correctAnswer, showAnswer, handleOnSubmitAnswer, globalFeedback } =
const { questionTitle, questionContent, correctAnswer, showAnswer, handleOnSubmitAnswer, globalFeedback } =
props;
const [answer, setAnswer] = useState<boolean | undefined>(undefined);
useEffect(() => {
setAnswer(undefined);
}, [questionContent]);
}, [questionTitle]);
const selectedTrue = answer ? 'selected' : '';
const selectedFalse = answer !== undefined && !answer ? 'selected' : '';
return (
<div className="question-container">
<div className="title mb-1">
{questionTitle}
</div>
<div className="question content">
<div dangerouslySetInnerHTML={{ __html: TextType({text: questionContent}) }} />
<Latex>{questionContent}</Latex>
</div>
<div className="choices-wrapper mb-1">
<Button

View file

@ -1,67 +0,0 @@
# Plan d'itération 1
## Étapes jalons
| Étape jalon | Date |
| :------------------------------------------------ | :--------- |
| Début de l'itération | 2024/02/08 |
| Démo de l'application et révision des user cases | 2024/02/27 |
| Fin de l'itération | 2024/02/29 |
## Objectifs clés
Les objectifs clés de cette itération sont les suivants:
- Configurer le serveur pour héberger la solution
- Configurer la base de données pour permettre la sauvegarde des quizs sur le serveur
- Implémenter le téléversement d'image dans les quizs
- Corriger certains bugs
## Affectations d'éléments de travail
| Nom / Description | Priorité | [Taille estimée (points)](#commentEstimer 'Comment estimer?') | Assigné à (nom) | Documents de référence |
| ------------------------------ | -------: | ------------------------------------------------------------: | --------------- | ----------------------------------------------------------------------------------------------- |
| Création d'un serveur | 1 | 4 | Samy, Mélanie ||
| Sauvegarde de quiz création BD | 1| 4 | Mathieu, Louis ||
| Connexion d'un étudiant à un quiz en cours| 1| 4| Mathieu, Louis ||
| Upload d'images directement dans un quiz| 1| 3| Louis | |
| Bug: perte de connexion | 2| 1| Mathieu, Louis | |
| Bug commentaires | 2| 1| Mélanie | |
## Problèmes principaux rencontrés
| Problème | Notes |
| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| La section de GIFT pour la création des quizs ne semble plus prendre le code normalement comme avant. Un simple commentaire seul sera pris comme du texte normal et certains bout de codes ne fonctionnent pas correctement s'il n'y a pas une entrée avant.| Investigation en cours pour trouver ce qui ne fonctionne pas |
| Difficulté à mettre en place le microservice pour la gestion des images. API mis en place pour la gestion des images dans le backend| |
## Critères d'évaluation
> Une brève description de la façon d'évaluer si les objectifs (définis plus haut) de haut niveau ont été atteints.
> Vos critères d'évaluation doivent être objectifs (aucun membre de l'équipe ne peut avoir une opinion divergente) et quantifiables (sauf pour ceux évalués par l'auxiliaire d'enseignement). En voici des exemples:
- Accessibilité du serveur
- Disponibilité des images pour les quizs
- Modification du processus de connexion pour répondre aux cas utilisateurs
## Évaluation
| Résumé | |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
| Cible d'évaluation | Itération |
| Date d'évaluation | 2024/02/27 |
| Participants | **Équipe** : Louis-Antoine Caron, Samy Waddah, Mathieu Roy, Mélanie St-Hilaire<br> **professeur** : Christopher Fuhrman |
| État du projet | 🟢 |
### Éléments de travail: prévus vs réalisés
Le serveur a été configuré et la solution est présentement déployée pour débuter l'utilisation en classe. Cela permettra entre autre de tester les performances du serveur et permettra aux professeurs d'utiliser plus souvent la solution. Les quizs sont désormais sauvegardés sur le serveur, mais ils ne sont pas encore associés à un compte, il faut donc se fier au cookies pour récupérer les quizs. Les commentaires ont été temporairement corrigés en majorité, mais quelques problèmes de plus ont été apperçu dans la section d'édition du quiz. Le bug de perte de connexion semble avoir déja été corrigé par l'ancienne équipe et l'importation d'image dans les quiz est maintenant fonctionnelle.
### Évaluation par rapport aux résultats selon les critères d'évaluation
Nos principaux critères d'éavaluation ont été atteints, soit rendre le serveur accessible pour utilisation et autoriser l'importation d'images dans les quizs, qui sont maintenant sauvegardés sur le serveur. Même si de nouveaux problèmes ont fait surfaces, nous estimons que le projet répond à nos critères et est sur la bonne voie.
## Autres préoccupations et écarts
Quelques bugs en plus ont été découverts à la suite de cette itération. Une surveillance doit être effectué pour vérifier la stabilité du serveur.