EvalueTonSavoir/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx

221 lines
11 KiB
TypeScript
Raw Normal View History

2024-03-29 20:08:34 -04:00
// GiftCheatSheet.tsx
2024-04-07 13:35:39 -04:00
import React, { useState } from 'react';
2024-03-29 20:08:34 -04:00
import './giftCheatSheet.css';
2025-03-25 03:53:25 -04:00
import FileCopyIcon from '@mui/icons-material/FileCopy';
2024-03-29 20:08:34 -04:00
const GiftCheatSheet: React.FC = () => {
2024-04-07 13:35:39 -04:00
const [copySuccess, setCopySuccess] = useState(false);
const copyToClipboard = (text: string) => {
navigator.clipboard.writeText(text)
.then(() => {
setCopySuccess(true); // Afficher le message de succès
2024-04-07 17:41:11 -04:00
console.log(copySuccess);
2024-04-07 13:35:39 -04:00
// 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);
});
};
2025-03-25 03:53:25 -04:00
2024-04-07 13:35:39 -04:00
2025-02-13 08:50:53 -05:00
const QuestionVraiFaux = "::Exemple de question vrai/faux:: \n 2+2 \\= 4 ? {T} //Utilisez les valeurs {T}, {F}, {TRUE} et {FALSE}.";
const QuestionChoixMul = "::Ville capitale du Canada:: \nQuelle ville est la capitale du Canada? {\n~ Toronto\n~ Montréal\n= Ottawa #Rétroaction spécifique.\n} // Commentaire non visible (au besoin)";
const QuestionChoixMulMany = "::Villes canadiennes:: \n Quelles villes trouve-t-on au Canada? { \n~ %33.3% Montréal \n ~ %33.3% Ottawa \n ~ %33.3% Vancouver \n ~ %-100% New York \n ~ %-100% Paris \n#### Rétroaction globale de la question. \n} // Utilisez tilde (signe de vague) pour toutes les réponses. // On doit indiquer le pourcentage de chaque réponse.";
const QuestionCourte ="::Clé et porte:: \n Avec quoi ouvre-t-on une porte? { \n= clé \n= clef \n} // Permet de fournir plusieurs bonnes réponses. // Note: La casse n'est pas prise en compte.";
const QuestionNum ="::Question numérique avec marge:: \nQuel est un nombre de 1 à 5 ? {\n#3:2\n}\n \n// Plage mathématique spécifiée avec des points de fin d'intervalle. \n ::Question numérique avec plage:: \n Quel est un nombre de 1 à 5 ? {\n#1..5\n} \n\n// Réponses numériques multiples avec crédit partiel et commentaires.\n::Question numérique avec plusieurs réponses::\nQuand est né Ulysses S. Grant ? {\n# =1822:0 # Correct ! Crédit complet. \n=%50%1822:2 # Il est né en 1822. Demi-crédit pour être proche.\n}";
2024-03-29 20:08:34 -04:00
return (
<div className="gift-cheat-sheet">
<h2 className="subtitle">Informations pratiques sur l&apos;éditeur</h2>
2024-03-29 20:08:34 -04:00
<span>
L&apos;é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&nbsp;:
2024-03-29 20:08:34 -04:00
</span>
<div className="question-type">
<h4>1. Questions Vrai/Faux</h4>
<pre>
<code className="selectable-text">
2024-04-07 13:35:39 -04:00
{QuestionVraiFaux}
2024-03-29 20:08:34 -04:00
</code>
2024-04-07 13:35:39 -04:00
2024-03-29 20:08:34 -04:00
</pre>
2025-03-25 03:53:25 -04:00
<button onClick={() => copyToClipboard(QuestionVraiFaux)}>
<FileCopyIcon style={{ fontSize: 18, marginRight: '5px' }} />
Copier
</button>
2024-03-29 20:08:34 -04:00
</div>
<div className="question-type">
<h4>2. Questions à choix multiple</h4>
<pre>
<code className="question-code-block selectable-text">
{
2024-04-07 13:35:39 -04:00
QuestionChoixMul
2024-03-29 20:08:34 -04:00
}
</code>
</pre>
2025-03-25 03:53:25 -04:00
<button onClick={() => copyToClipboard(QuestionChoixMul)}>
{' '}
<FileCopyIcon style={{ fontSize: 18, marginRight: '5px' }} /> Copier
</button>
2024-03-29 20:08:34 -04:00
</div>
<div className="question-type">
<h4>3. Questions à choix multiple avec plusieurs réponses</h4>
<pre>
<code className="question-code-block selectable-text">
{
2024-04-07 13:35:39 -04:00
QuestionChoixMulMany
2024-03-29 20:08:34 -04:00
}
</code>
</pre>
2025-03-25 03:53:25 -04:00
<button onClick={() => copyToClipboard(QuestionChoixMulMany)}>
<FileCopyIcon style={{ fontSize: 18, marginRight: '5px' }} />
Copier
</button>
2024-03-29 20:08:34 -04:00
</div>
<div className="question-type">
<h4>4. Questions à réponse courte</h4>
2024-03-29 20:08:34 -04:00
<pre>
<code className="question-code-block selectable-text">
2024-04-07 13:35:39 -04:00
{QuestionCourte}
2024-03-29 20:08:34 -04:00
</code>
</pre>
2025-03-25 03:53:25 -04:00
<button onClick={() => copyToClipboard(QuestionCourte)}>
{' '}
<FileCopyIcon style={{ fontSize: 18, marginRight: '5px' }} /> Copier
</button>
2024-03-29 20:08:34 -04:00
</div>
<div className="question-type">
2025-02-13 08:50:53 -05:00
<h4> 5. Questions numériques </h4>
2024-03-29 20:08:34 -04:00
<pre>
<code className="question-code-block selectable-text">
{
2024-04-07 13:35:39 -04:00
QuestionNum
2024-03-29 20:08:34 -04:00
}
2024-04-07 13:35:39 -04:00
</code>
2024-03-29 20:08:34 -04:00
</pre>
2025-03-25 03:53:25 -04:00
<button onClick={() => copyToClipboard(QuestionNum)}>
{' '}
<FileCopyIcon style={{ fontSize: 18, marginRight: '5px' }} /> Copier
</button>
2024-03-29 20:08:34 -04:00
</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">
2025-01-26 16:42:21 -05:00
<h4> 7. Caractères spéciaux </h4>
2024-03-29 20:08:34 -04:00
<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 \
2024-03-29 20:08:34 -04:00
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>
2024-03-29 20:08:34 -04:00
<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.
2024-03-29 20:08:34 -04:00
</p>
<p>Exemple d&apos;équation:</p>
2024-03-29 20:08:34 -04:00
<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>
2024-03-29 20:08:34 -04:00
</pre>
</div>
2025-01-14 16:21:32 -05:00
<div className="question-type" id="images-section">
<h4> 9. Images </h4>
2025-01-26 16:42:21 -05:00
<p>Il est possible d&apos;insérer une image dans une question, une réponse (choix multiple) et dans une rétroaction. D&apos;abord, <strong>le format de l&apos;élément doit être [markdown]</strong>. Ensuite utilisez la syntaxe suivante&nbsp;:</p>
2024-03-29 20:08:34 -04:00
<pre>
<code className="question-code-block">
{'!['}
<span className="code-comment">{`text alternatif`}</span>
{']('}
<span className="code-comment">{`URL-de-l'image`}</span>
{' "'}
<span className="code-comment">{`texte de l'infobulle`}</span>
{'")'}
2024-03-29 20:08:34 -04:00
</code>
</pre>
<p>Exemple d&apos;une question Vrai/Faux avec l&apos;image d&apos;un chat:</p>
<pre>
<code className="question-code-block">
{'[markdown]Ceci est un chat: \n![Image de chat](https\\://www.example.com\\:8000/chat.jpg "Chat mignon")\n{T}'}
</code>
</pre>
2025-01-26 16:42:21 -05:00
<p>Exemple d&apos;une question à choix multiple avec l&apos;image d&apos;un chat dans une rétroaction&nbsp;:</p>
<pre>
<code className="question-code-block">
{`[markdown]Qui a initié le développement d'ÉvalueTonSavoir {=ÉTS#OUI! ![](https\\://www.etsmtl.ca/assets/img/ets.svg "\\=50px")
~EPFL#Non...}`}
</code>
</pre>
<p>Note&nbsp;: les images étant spécifiées avec la syntaxe Markdown dans GIFT, on doit échapper les caractères spéciales (:) dans l&apos;URL de l&apos;image.</p>
2024-03-29 20:08:34 -04:00
<p style={{ color: 'red' }}>
Attention: l&apos;ancienne fonctionnalité avec les balises <code>{'<img>'}</code> n&apos;est plus
supportée.
2024-03-29 20:08:34 -04:00
</p>
2025-03-25 03:53:25 -04:00
</div>
2024-03-29 20:08:34 -04:00
<div className="question-type">
<h4> 10. Informations supplémentaires </h4>
<p>
GIFT supporte d&apos;autres formats de questions que nous ne gérons pas sur cette
2024-03-29 20:08:34 -04:00
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>
);
2025-03-25 03:53:25 -04:00
};
2024-04-07 13:39:00 -04:00
2024-03-29 20:08:34 -04:00
export default GiftCheatSheet;