mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
265 lines
10 KiB
TypeScript
265 lines
10 KiB
TypeScript
// GiftCheatSheet.tsx
|
|
import React, { useState } from 'react';
|
|
import './giftCheatSheet.css';
|
|
|
|
const GiftCheatSheet: React.FC = () => {
|
|
const [copySuccess, setCopySuccess] = useState(false);
|
|
|
|
const copyToClipboard = (text: string) => {
|
|
navigator.clipboard.writeText(text)
|
|
.then(() => {
|
|
setCopySuccess(true); // Afficher le message de succès
|
|
console.log(copySuccess);
|
|
// Masquer le message de succès après quelques secondes
|
|
setTimeout(() => {
|
|
setCopySuccess(false);
|
|
}, 3000); // 3 secondes
|
|
})
|
|
.catch((error) => {
|
|
console.error('Erreur lors de la copie dans le presse-papiers : ', error);
|
|
});
|
|
};
|
|
|
|
|
|
const QuestionVraiFaux = `Le soleil se lève à l'ouest.
|
|
<details>
|
|
<summary>Indice</summary>
|
|
<p>La réponse est faux!</p>
|
|
</details>
|
|
{FALSE}
|
|
`;
|
|
|
|
const QuestionChoixMul = `<details>
|
|
<summary>Indice</summary>
|
|
<p>La capitale du Canada est située au sud de l'Ontario.</p>
|
|
</details>
|
|
Quelle ville est la capitale du Canada ? {
|
|
~ Toronto
|
|
~ Montréal
|
|
= Ottawa #Bonne réponse !
|
|
}`;
|
|
const QuestionChoixMulMany = `<details>
|
|
<summary>Indice</summary>
|
|
<p>Les villes du Canada sont toutes situées dans des provinces du pays.</p>
|
|
</details>
|
|
Quelles villes trouve-t-on au Canada? {
|
|
~ %33.3% Montréal
|
|
~ %33.3% Ottawa
|
|
~ %33.3% Vancouver
|
|
~ %-100% New York
|
|
~ %-100% Paris
|
|
#### La bonne réponse est Montréal, Ottawa et Vancouver
|
|
}`;
|
|
const QuestionCourte = `<details>
|
|
<summary>Indice</summary>
|
|
<p>Une clé ou une clef permet d'ouvrir une porte.</p>
|
|
</details>
|
|
Avec quoi ouvre-t-on une porte? {
|
|
= clé
|
|
= clef
|
|
}
|
|
`;
|
|
const QuestionNum = `// Question de plage mathématique.
|
|
<details>
|
|
<summary>Indice</summary>
|
|
<p>Le nombre doit être compris entre 1 et 5.</p>
|
|
</details>
|
|
Quel est un nombre de 1 à 5 ? {
|
|
#3:2
|
|
}
|
|
|
|
// Plage mathématique spécifiée avec des points de fin d'intervalle.
|
|
<details>
|
|
<summary>Indice</summary>
|
|
<p>Tout nombre entre 1 et 5 est correct.</p>
|
|
</details>
|
|
Quel est un nombre de 1 à 5 ? {
|
|
#1..5
|
|
}
|
|
|
|
// Réponses numériques multiples avec crédit partiel et commentaires.
|
|
<details>
|
|
<summary>Indice</summary>
|
|
<p>Il est né au 19ᵉ siècle.</p>
|
|
</details>
|
|
Quand est né Ulysses S. Grant ? {
|
|
# =1822:0 # Correct ! Crédit complet.
|
|
=%50%1822:2 # Il est né en 1822. Demi-crédit pour être proche.
|
|
}
|
|
`;
|
|
return (
|
|
<div className="gift-cheat-sheet">
|
|
<h2 className="subtitle">Informations pratiques sur l'éditeur</h2>
|
|
<span>
|
|
L'éditeur utilise le format GIFT (General Import Format Template) créé pour la
|
|
plateforme Moodle afin de générer les mini-tests. Ci-dessous vous pouvez retrouver la
|
|
syntaxe pour chaque type de question :
|
|
</span>
|
|
<div className="question-type">
|
|
<h4>1. Questions Vrai/Faux</h4>
|
|
<pre>
|
|
<code className="selectable-text">
|
|
{QuestionVraiFaux}
|
|
</code>
|
|
|
|
</pre>
|
|
<button onClick={() => copyToClipboard(QuestionVraiFaux)}>Copier</button>
|
|
</div>
|
|
|
|
<div className="question-type">
|
|
<h4>2. Questions à choix multiple</h4>
|
|
<pre>
|
|
<code className="question-code-block selectable-text">
|
|
{
|
|
QuestionChoixMul
|
|
}
|
|
</code>
|
|
</pre>
|
|
<button onClick={() => copyToClipboard(QuestionChoixMul)}>Copier</button>
|
|
</div>
|
|
<div className="question-type">
|
|
<h4>3. Questions à choix multiple avec plusieurs réponses</h4>
|
|
<pre>
|
|
<code className="question-code-block selectable-text">
|
|
{
|
|
QuestionChoixMulMany
|
|
}
|
|
</code>
|
|
</pre>
|
|
<button onClick={() => copyToClipboard(QuestionChoixMulMany)}>Copier</button>
|
|
</div>
|
|
|
|
<div className="question-type">
|
|
<h4>4. Questions à réponse courte</h4>
|
|
<pre>
|
|
<code className="question-code-block selectable-text">
|
|
{QuestionCourte}
|
|
</code>
|
|
</pre>
|
|
<button onClick={() => copyToClipboard(QuestionCourte)}>Copier</button>
|
|
</div>
|
|
|
|
<div className="question-type">
|
|
<h4> 5. Question numérique </h4>
|
|
<pre>
|
|
<code className="question-code-block selectable-text">
|
|
{
|
|
QuestionNum
|
|
}
|
|
</code>
|
|
</pre>
|
|
<button onClick={() => copyToClipboard(QuestionNum)}>Copier</button>
|
|
</div>
|
|
|
|
<div className="question-type">
|
|
<h4> 6. Paramètres optionnels </h4>
|
|
<pre>
|
|
<code className="question-code-block selectable-text">
|
|
{'::Titre:: '}
|
|
<span className="code-comment selectable-text">
|
|
{' // Ajoute un titre à une question'}
|
|
</span>
|
|
<br />
|
|
{'# Feedback '}
|
|
<span className="code-comment selectable-text">
|
|
{' // Feedback pour UNE réponse'}
|
|
</span>
|
|
<br />
|
|
{'// Commentaire '}
|
|
<span className="code-comment selectable-text">
|
|
{' // Commentaire non apparent'}
|
|
</span>
|
|
<br />
|
|
{'#### Feedback général '}
|
|
<span className="code-comment selectable-text">
|
|
{' // Feedback général pour une question'}
|
|
</span>
|
|
<br />
|
|
{'%50% '}
|
|
<span className="code-comment selectable-text">
|
|
{" // Poids d'une réponse (peut être négatif)"}
|
|
</span>
|
|
</code>
|
|
</pre>
|
|
</div>
|
|
|
|
<div className="question-type">
|
|
<h4> 7. Caractères spéciaux </h4>
|
|
<p>
|
|
Si vous souhaitez utiliser certains caractères spéciaux dans vos énoncés,
|
|
réponses ou feedback, vous devez «échapper» ces derniers en ajoutant un \
|
|
devant:
|
|
</p>
|
|
<pre>
|
|
<code className="question-code-block selectable-text">
|
|
{'\\~ \n\\= \n\\# \n\\{ \n\\} \n\\:'}
|
|
</code>
|
|
</pre>
|
|
</div>
|
|
|
|
<div className="question-type">
|
|
<h4> 8. LaTeX et Markdown</h4>
|
|
<p>
|
|
Les formats LaTeX et Markdown sont supportés 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>
|
|
</pre>
|
|
</div>
|
|
|
|
<div className="question-type" id="images-section">
|
|
<h4> 9. Images </h4>
|
|
<p>Il est possible d'insérer une image dans une question, une réponse (choix multiple) et dans une rétroaction. D'abord, <strong>le format de l'élément doit être [markdown]</strong>. Ensuite utilisez la syntaxe suivante :</p>
|
|
<pre>
|
|
<code className="question-code-block">
|
|
{''}
|
|
</code>
|
|
</pre>
|
|
<p>Exemple d'une question Vrai/Faux avec l'image d'un chat:</p>
|
|
<pre>
|
|
<code className="question-code-block">
|
|
{'[markdown]Ceci est un chat: \n\n{T}'}
|
|
</code>
|
|
</pre>
|
|
<p>Exemple d'une question à choix multiple avec l'image d'un chat dans une rétroaction :</p>
|
|
<pre>
|
|
<code className="question-code-block">
|
|
{`[markdown]Qui a initié le développement d'ÉvalueTonSavoir {=ÉTS#OUI! 
|
|
~EPFL#Non...}`}
|
|
</code>
|
|
</pre>
|
|
<p>Note : les images étant spécifiées avec la syntaxe Markdown dans GIFT, on doit échapper les caractères spéciales (:) dans l'URL de l'image.</p>
|
|
<p style={{ color: 'red' }}>
|
|
Attention: l'ancienne fonctionnalité avec les balises <code>{'<img>'}</code> n'est plus
|
|
supportée.
|
|
</p>
|
|
</div>
|
|
<div className="question-type">
|
|
<h4> 10. Informations supplémentaires </h4>
|
|
<p>
|
|
GIFT supporte d'autres formats de questions que nous ne gérons pas sur cette
|
|
application.
|
|
</p>
|
|
<p>Vous pouvez retrouver la Documentation de GIFT (en anglais):</p>
|
|
<a href="https://ethan-ou.github.io/vscode-gift-docs/docs/questions">
|
|
Documentation de GIFT
|
|
</a>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default GiftCheatSheet;
|