HEX
Server: Apache
System: Linux vps.mmtprep.com 4.18.0-477.21.1.el8_8.x86_64 #1 SMP Thu Aug 10 13:51:50 EDT 2023 x86_64
User: mmtprep (1001)
PHP: 8.1.34
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/mmtprep/public_html/mathzen.mmtprep.com/assets/Exercice-FKaS4mj7.js.map
{"version":3,"file":"Exercice-FKaS4mj7.js","sources":["../../src/exercices/Exercice.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type Grandeur from '../modules/Grandeur'\n\n/**\n *\n *  Classe parente de tous les exercices.\n *\n * @author Rémi Angot\n */\nexport default class Exercice {\n  titre: string\n  id?: string\n  uuid!: string\n  sup: any\n  sup2: any\n  sup3: any\n  sup4: any\n  correctionInteractive?: (i: number) => string | string[] | Promise<string | string[]>\n  exoCustomResultat?: boolean // Lorsqu'il est à true, correctionInteractive renvoie un tableau de string ce qui permet à une question de rapporter plusieurs points\n  duree?: number\n  seed?: string\n  numeroExercice?: number\n  typeExercice?: string\n  duration?: number\n  boutonAide: boolean | HTMLButtonElement\n  consigne: string\n  consigneCorrection: string\n  introduction: string\n  listeQuestions: string[]\n  listeCorrections: string[]\n  listeCanReponsesACompleter?: string[]\n  listeCanEnonces?: string[]\n  question?: string // Seulement pour les exercices de type simple\n  reponse?: string | number // Seulement pour les exercices de type simple\n  correction?: string // Seulement pour les exercices de type simple\n  canEnonce?: string // Seulement pour les exercices de type simple\n  canReponseACompleter?: string // Seulement pour les exercices de type simple\n  formatChampTexte?: string // Seulement pour les exercices de type simple\n  optionsChampTexte?: object // Seulement pour les exercices de type simple\n  compare?: (input: string, goodAnswer: string | Grandeur)=>{isOk: boolean, feedback?: string}\n  formatInteractif?: string // Options par défaut pour les champs Mathlive (très utile dans les exercices simples)\n  contenu?: string\n  contenuCorrection?: string\n  autoCorrection: object[]\n  amcType?: string\n  tableauSolutionsDuQcm?: object[]\n  spacing: number\n  spacingCorr: number\n  pasDeVersionLatex: boolean\n  listePackages: string[]\n  consigneModifiable: boolean\n  nbQuestionsModifiable: boolean\n  nbCols: number // Nombre de colonnes pour la sortie LaTeX\n  nbColsCorr: number\n  nbColsModifiable: boolean\n  nbColsCorrModifiable: boolean\n  spacingModifiable: boolean\n  spacingCorrModifiable: boolean\n  listeAvecNumerotation?: boolean\n  beamer: boolean\n  tailleDiaporama: number\n  nbQuestions: number\n  pointsParQuestions: number\n  correctionDetailleeDisponible: boolean\n  correctionDetaillee: boolean\n  correctionIsCachee: boolean\n  video: string\n  interactif: boolean // l'exercice est affiché en mode interactif si `true`\n  interactifObligatoire: boolean\n  interactifReady: boolean // flag pour indiquer si l'exercice est dispo en interactif ou pas\n  interactifType?: string\n  besoinFormulaireNumerique: boolean | [titre: string, max: number, tooltip: string] | [titre: string, max: number]\n  besoinFormulaireTexte: boolean | [string, string]\n  besoinFormulaireCaseACocher: boolean | [string] | [string, boolean]\n  besoinFormulaire2Numerique: boolean | [titre: string, max: number, tooltip: string] | [titre: string, max: number]\n  besoinFormulaire2Texte: boolean | [string, string]\n  besoinFormulaire2CaseACocher: boolean | [string] | [string, boolean]\n  besoinFormulaire3Numerique: boolean | [titre: string, max: number, tooltip: string] | [titre: string, max: number]\n  besoinFormulaire3Texte: boolean | [string, string]\n  besoinFormulaire3CaseACocher: boolean | [string] | [string, boolean]\n  besoinFormulaire4Numerique: boolean | [titre: string, max: number, tooltip: string] | [titre: string, max: number]\n  besoinFormulaire4Texte: boolean | [string, string]\n  besoinFormulaire4CaseACocher: boolean | [string] | [string, boolean]\n  mg32Editable: boolean\n  listeArguments: string[] // Variable servant à comparer les exercices pour ne pas avoir deux exercices identiques\n  examen?: string // Pour les exercices statiques\n  mois?: string // Pour les exercices statiques\n  annee?: string // Pour les exercices statiques\n  lieu?: string // Pour les exercices statiques\n  content?: string // Pour les exercices statiques\n  contentCorr?: string // Pour les exercices statiques\n  comment?: string // Commentaire facultatif de l'auteur de l'exercice\n  answers?: { [key: string]: string } // Réponses de l'élève\n  isDone?: boolean\n  html?: HTMLElement\n  constructor () {\n  // ////////////////////////////////////////////////\n  // Autour de l'exercice\n  // ////////////////////////////////////////////////\n    this.titre = '' // Chaîne de caractère sans point à la fin. C'est le titre de l'exercice qui sera affiché avec la référence dans le générateur d'exercices.\n    this.boutonAide = false // Bouton en haut à droite des questions permettant d'afficher un pdf, texte, image, vidéo, contenu d'un autre site en \"pop-up\" via les fonctions modalXXXXXXX de outils.js.\n    // Ci-dessous des exemples d'utilisation du this.boutonAide.\n    // Noter que pour récupérer le numeroExercice dont il est question, au lieu d'écrire \"this.nouvelleVersion = function () {\" comme d'habitude, on écrit \"this.nouvelleVersion = function (numeroExercice) {\".\n    // this.boutonAide = modalImage(numeroExercice, urlImage, titre, labelBouton = 'Illustration', icone = 'image')\n    // this.boutonAide = modalPdf(numeroExercice, urlPdf, titre='Aide', labelBouton = 'Aide - PDF', icone = 'file pdf')\n    // this.boutonAide = modalTexteCourt(numeroExercice, texte, labelBouton = 'Aide', icone = 'info circle')\n    // this.boutonAide = modalTexteLong(numeroExercice, titre, texte, labelBouton = 'Aide', icone = 'info circle')\n    // this.boutonAide = modalUrl(numeroExercice, url, labelBouton = 'Aide', icone) pour afficher le contenu de url dans un iframe\n    // this.boutonAide = modalVideo(numeroExercice, urlVideo, titre, labelBouton, icone)\n    // this.boutonAide = modalYoutube(numeroExercice, idYoutube, titre, labelBouton = 'Aide - Vidéo', icone = 'youtube')\n\n    // ///////////////////////////////////////////////\n    // Construction de l'exercice\n    // ///////////////////////////////////////////////\n    this.consigne = '' // Chaîne de caractère qui apparaît en gras au-dessus des questions de préférence à l'infinitif et AVEC point à la fin.\n    this.consigneCorrection = '' // Chaîne de caractère en général vide qui apparaît au-dessus des corrections.\n    this.introduction = '' // Texte qui n'est pas forcément en gras et qui apparaît entre la consigne et les questions.\n    this.listeQuestions = [] // Liste de chaînes de caractères avec chacune correspondant à une question. Chaque question est définie par la méthode this.nouvelleVersion puis `listeDeQuestionToContenu(this)` mettra en forme `this.contenu` et `this.contenuCorrection` suivant `context` (sortie HTML ?...)\n    this.listeCorrections = [] // Idem avec la correction.\n    this.contenu = '' // Chaîne de caractères avec tout l'énoncé de l'exercice construit à partir de `this.listeQuestions` suivant le `context`\n    this.contenuCorrection = '' // Idem avec la correction\n    this.autoCorrection = [] // Liste des objets par question pour correction interactive || export AMC.\n    this.tableauSolutionsDuQcm = [] // Pour sauvegarder les solutions des QCM.\n\n    // ///////////////////////////////////////////////\n    // Mise en forme de l'exercice\n    // ///////////////////////////////////////////////\n    this.spacing = 1 // Interligne des questions\n    this.spacingCorr = 1 // Interligne des réponses\n\n    // ////////////////////////////////////////////\n    // Gestion de la sortie LateX\n    // ////////////////////////////////////////////\n    this.pasDeVersionLatex = false // booléen qui indique qu'une sortie LateX est impossible.\n    this.listePackages = [] // string ou liste de string avec le nom des packages spécifiques à ajouter dans le préambule.\n    this.consigneModifiable = true // booléen pour déterminer si la consigne est modifiable en ligne dans la sortie LaTeX.\n    this.nbQuestionsModifiable = true // booléen pour déterminer si le nombre de questions est modifiable en ligne.\n    this.nbCols = 1 // Nombre de colonnes pour la sortie LaTeX des questions (environnement multicols).\n    this.nbColsCorr = 1 // Nombre de colonnes pour la sortie LaTeX des réponses (environnement multicols).\n    this.nbColsModifiable = true // booléen pour déterminer si le nombre de colonnes est modifiable en ligne dans la sortie LaTeX.\n    this.nbColsCorrModifiable = true // booléen pour déterminer si le nombre de colonnes de la correction est modifiable en ligne dans la sortie LaTeX.\n    this.spacingModifiable = true // booléen pour déterminer si l'espacement est modifiable en ligne dans la sortie LaTeX.\n    this.spacingCorrModifiable = true // booléen pour déterminer si l'espacement est modifiable en ligne dans la sortie LaTeX.\n    // this.vspace = -1 //Ajoute un \\vspace{-1cm} avant l'énoncé ce qui peut être pratique pour des exercices avec des figures.\n\n    // ////////////////////////////////////////////\n    // Gestion de la sortie autre que LateX\n    // ////////////////////////////////////////////\n    this.beamer = false // booléen pour savoir si la sortie devra être un diaporama beamer\n    this.tailleDiaporama = 1 // Facteur par lequel multiplier la police pour la vue 'diap'\n\n    // ////////////////////////////////////////////\n    // Paramètres\n    // ////////////////////////////////////////////\n    this.nbQuestions = 10 // Nombre de questions par défaut (récupéré dans l'url avec le paramètre `,n=`)\n    this.pointsParQuestions = 1 // Pour définir la note par défaut d'un exercice dans sa sortie Moodle\n    this.correctionDetailleeDisponible = false // booléen qui indique si une correction détaillée est disponible.\n    this.correctionDetaillee = true // booléen indiquant si la correction détaillée doit être affiché par défaut (récupéré dans l'url avec le paramètre `,cd=`).\n    this.correctionIsCachee = false // pour cacher une correction\n    this.video = '' // Chaine de caractère pour un complément numérique (id Youtube, url, code iframe...).\n    // Interactivité\n    this.interactif = false // Exercice sans saisie utilisateur par défaut.\n    this.interactifReady = false // Exercice sans saisie utilisateur par défaut.\n    this.interactifObligatoire = false // Certains exercices sont uniquement des QCM et n'ont pas de version non interactive.\n    // Ajoute un formulaire de paramétrage par l'utilisateur récupéré via this.sup ou dans le paramètre d'url ',s='\n    this.besoinFormulaireNumerique = false // Sinon this.besoinFormulaireNumerique = [texte, max, tooltip facultatif]\n    this.besoinFormulaireTexte = false // Sinon this.besoinFormulaireTexte = [texte, tooltip]\n    this.besoinFormulaireCaseACocher = false // Sinon this.besoinFormulaireCaseACocher = [texte]\n    // Ajoute un formulaire de paramétrage par l'utilisateur récupéré via this.sup2 ou dans le paramètre d'url ',s2='\n    this.besoinFormulaire2Numerique = false // Sinon this.besoinFormulaire2Numerique = [texte, max, tooltip facultatif]\n    this.besoinFormulaire2Texte = false // Sinon this.besoinFormulaire2Texte = [texte, tooltip]\n    this.besoinFormulaire2CaseACocher = false // Sinon this.besoinFormulaire2CaseACocher = [texte]\n    // Ajoute un formulaire de paramétrage par l'utilisateur récupéré via this.sup3 ou dans le paramètre d'url ',s3='\n    this.besoinFormulaire3Numerique = false // Sinon this.besoinFormulaire3Numerique = [texte, max, tooltip facultatif]\n    this.besoinFormulaire3Texte = false // Sinon this.besoinFormulaire3Texte = [texte, tooltip]\n    this.besoinFormulaire3CaseACocher = false // Sinon this.besoinFormulaire3CaseACocher = [texte]\n    // Ajoute un formulaire de paramétrage par l'utilisateur récupéré via this.sup4 ou dans le paramètre d'url ',s4='\n    this.besoinFormulaire4Numerique = false // Sinon this.besoinFormulaire4Numerique = [texte, max, tooltip facultatif]\n    this.besoinFormulaire4Texte = false // Sinon this.besoinFormulaire4Texte = [texte, tooltip]\n    this.besoinFormulaire4CaseACocher = false // Sinon this.besoinFormulaire4CaseACocher = [texte]\n\n    // ///////////////////////////////////////////////\n    // Exercice avec des dépendances particulières\n    // ///////////////////////////////////////////////\n    // this.typeExercice = 'MG32' // Pour charger MathGraph32.\n    this.mg32Editable = false // Les figures MG32 ne sont pas interactives par défaut.\n    // this.dimensionsDivMg32 = [500, 450] // Dimensions du SVG créé par MathGraph32.\n\n    // this.typeExercice = 'Scratch' // Pour charger Scratchblocks.\n    // this.typeExercice = 'IEP' // Pour charger InstrumEnPoche.\n    // this.typeExercice = 'dnb' // Ce n’est pas un exercice aléatoire il est traité différemment. Les exercices DNB sont des images pour la sortie Html et du code LaTeX statique pour la sortie latex.\n    // this.typeExercice = 'XCas' // Pour charger le JavaScript de XCas qui provient de https://www-fourier.ujf-grenoble.fr/~parisse/giac_fr.html\n    // this.typeExercice = 'simple' // Pour les exercices plus simples destinés aux courses aux nombres\n\n    this.listeArguments = [] // Variable servant à comparer les exercices pour ne pas avoir deux exercices identiques\n    this.answers = {}\n    this.listeAvecNumerotation = true\n\n    /**\n   * Compare chaque nouvelle version d'un exercice aux précédentes pour s'assurer de ne pas avoir deux exercices identiques\n   * @param {int} i indice de la question\n   * @param  {...any} args toutes les variables pertinentes qui \"résumeraient\" la question\n   * @returns {boolean} true si la question n'a jamais été posée\n   */\n  }\n\n  nouvelleVersion (numeroExercice?: number): void {\n    console.log(numeroExercice)\n  }\n\n  applyNewSeed () {\n    const seed = generateSeed({\n      includeUpperCase: true,\n      includeNumbers: true,\n      length: 4,\n      startsWithLowerCase: false\n    })\n    this.seed = seed\n  }\n\n  questionJamaisPosee (i: number, ...args:(string|number)[]) {\n    if (i === 0) this.listeArguments = []\n    let argsConcatenes = ''\n    for (const arg of args) {\n      if (arg !== undefined) argsConcatenes += arg.toString()\n    }\n    if (this.listeArguments != null && this.listeArguments.indexOf(argsConcatenes) > -1) {\n      return false\n    } else if (this.listeArguments != null) {\n      this.listeArguments.push(argsConcatenes)\n      return true\n    }\n  }\n}\n\nfunction generateSeed ({ includeUpperCase = true, includeNumbers = true, length = 4, startsWithLowerCase = false }: { includeUpperCase?: boolean, includeNumbers?: boolean, length?: number, startsWithLowerCase?: boolean } = {}) {\n  let a = 10\n  const b = 'abcdefghijklmnopqrstuvwxyz'\n  let c = ''\n  let d = 0\n  let e = '' + b\n  if (startsWithLowerCase) {\n    c = b[Math.floor(Math.random() * b.length)]\n    d = 1\n  }\n  if (length) {\n    a = length\n  }\n  if (includeUpperCase) {\n    e += b.toUpperCase()\n  }\n  if (includeNumbers) {\n    e += '1234567890'\n  }\n\n  for (; d < a; d++) {\n    c += e[Math.floor(Math.random() * e.length)]\n  }\n  return c\n}\n"],"names":["Exercice","__publicField","numeroExercice","seed","generateSeed","args","argsConcatenes","arg","includeUpperCase","includeNumbers","length","startsWithLowerCase","a","b","c","d","e"],"mappings":"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"}