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/AjouteTableauMathlive-VuAy6cax.js.map
{"version":3,"file":"AjouteTableauMathlive-VuAy6cax.js","sources":["../../src/lib/interactif/tableaux/AjouteTableauMathlive.ts"],"sourcesContent":["import './tableauMathlive.scss'\nimport { notify } from '../../../bugsnag'\n\nexport interface Icell {\ntexte: string\nlatex: boolean\ngras: boolean\ncolor: string\n}\n\nexport type FlecheCote = false | string\nexport type FlecheSens = 'bas' | 'haut'\nexport type Fleche = [number, number, string, number] | [number, number, string]\nexport type Raws = Array<Icell[]>\n\n// Le TabPropMathlive ne gère pas les flèches... alors, je ne sais pas pourquoi j'ai mis toutes ces propriétés faculatives... Pour l'avenir ?\n// Si quelqu'un sait faire, qu'il ne se gêne pas !\nexport interface Itableau {\nnbColonnes: number\nligne1: Icell[]\nligne2: Icell[]\nflecheHaut?: Fleche[] // [[1, 2, '\\\\times 6,4', 3], [2, 3, '\\\\div 6']]\nflecheBas?: Fleche[]\nflecheDroite?: FlecheCote // à remplacer par un string\nflecheDroiteSens?: FlecheSens\nflecheGauche?: FlecheCote\nflecheGaucheSens?: FlecheSens\n}\n\nexport interface ItabDbleEntry {\n  raws: Array<Icell[]>\n  headingCols: Icell[]\n  headingLines: Icell[]\n}\n\nfunction appendCell ({ line, icell, indexCol, indexLine, tag, classes, NoEx, NoQ }: {line: HTMLElement, icell: Icell, indexCol:number, indexLine:number, tag:'th'|'td', classes:string, NoEx: number, NoQ: number}) {\n  const cell = document.createElement(tag)\n  let element: HTMLElement\n  if (icell.texte === '') {\n    element = document.createElement('math-field')\n    element.classList.add('tableauMathlive')\n    for (const classe of classes.split(' ')) {\n      if (classe !== '') element.classList.add(classe)\n    }\n    element.id = `champTexteEx${NoEx}Q${NoQ}L${indexLine}C${indexCol}`\n    element.setAttribute('virtual-keyboard-mode', 'manual')\n    cell.appendChild(element)\n    const spanFeedback = document.createElement('span')\n    spanFeedback.id = `feedbackEx${NoEx}Q${NoQ}L${indexLine}C${indexCol}`\n    cell.appendChild(spanFeedback)\n  } else {\n    if (icell.latex) {\n    // J'aimerais pouvoir utiliser mathlive mais ça semble poser des soucis, je remplace par katex...\n    //  element = document.createElement('math-field')\n    // element.innerHTML = `<math-field read-only style=\"display:inline-block\" id=\"L${indexLine}C${i + 1}\">${icell.texte}</math-field>`\n      element = document.createElement('span')\n      cell.appendChild(element)\n      element.outerHTML = `<span id=\"spanEx${NoEx}Q${NoQ}L${indexLine}C${indexCol}\">$${icell.texte}$</span>`\n    } else {\n      element = document.createElement('span')\n      cell.appendChild(element)\n      element.outerHTML = `<span id=\"spanEx${NoEx}Q${NoQ}L${indexLine}C${indexCol}\">${icell.texte}</span>`\n    }\n  }\n\n  line.appendChild(cell)\n}\n\n/**\n * @param {HTMLTableRowElement} line L'élément HTML <tr> qui reçoit les cellules\n * @param {Icell[]} content la liste des cellules au format Icell\n * @param {number} index le numéro de la ligne pour fabriquer l'identifiant de cellule\n * @param {'td'|'th'} tag le tag (td pour des cellules à l'intérieur th pour des cellules d'entête)\n * @param {string} classes une liste de className dans un string séparés par des espaces\n */\nconst fillLine = function ({ line, content, index, tag, classes, NoEx, NoQ }:{line: HTMLElement, content: Icell[], index: number, tag: 'td'|'th', classes: string, NoEx: number, NoQ: number}): void {\n  for (let i = 0; i < content.length; i++) {\n    appendCell({ line, icell: content[i], indexCol: i, indexLine: index, tag, classes, NoEx, NoQ })\n  }\n}\n\nexport class AddTabPropMathlive {\n  id!: string // ce sera nécessaire pour retrouver le tableau s'il y en a plusieurs dans la page.\n  numeroExercice: number\n  numeroQuestion: number\n  output!: string\n  nbColonnes: number\n  ligne1!: Icell[]\n  ligne2!: Icell[]\n  flecheHaut: Fleche[] // [[1, 2, '\\\\times 6,4', 3], [2, 3, '\\\\div 6']]\n  flecheBas: Fleche[]\n  flecheDroite: FlecheCote // à remplacer par un string\n  flecheDroiteSens: FlecheSens\n  flecheGauche: FlecheCote\n  flecheGaucheSens: FlecheSens\n  classes?: string\n\n  private constructor (numeroExercice: number, question: number, tableau: Itableau, classes: string) {\n    this.nbColonnes = tableau.nbColonnes ?? 1\n    this.flecheHaut = tableau.flecheHaut ?? []\n    this.flecheBas = tableau.flecheBas ?? []\n    this.flecheDroite = tableau.flecheDroite ?? false\n    this.flecheDroiteSens = tableau.flecheDroiteSens ?? 'bas'\n    this.flecheGauche = tableau.flecheGauche ?? false\n    this.flecheGaucheSens = tableau.flecheGaucheSens ?? 'haut'\n    this.numeroExercice = numeroExercice ?? 0\n    this.numeroQuestion = question\n    this.id = `tabMLEx${this.numeroExercice}Q${this.numeroQuestion}`\n    this.classes = classes\n  }\n\n  static create (numeroExercice: number, question: number, tableau: Itableau, classes: string) {\n    if (!Array.isArray(tableau.ligne1) || !Array.isArray(tableau.ligne1)) {\n      notify('ajouteTableauMathlive : vérifiez vos paramètres !', { ligne1: tableau.ligne1, ligne2: tableau.ligne2, nbColonnes: tableau.nbColonnes })\n    }\n    // ça, c'est pour ne pas modifier les lignes du tableau passé en argument\n    const NoEx = numeroExercice ?? 0\n    const NoQ = question\n    const ligne1 = [...tableau.ligne1]\n    const ligne2 = [...tableau.ligne2]\n    const tableauMathlive: AddTabPropMathlive = new AddTabPropMathlive(numeroExercice, question, tableau, classes)\n    const table = document.createElement('table')\n    table.className = 'tableauMathlive'\n    table.id = `tabMathliveEx${NoEx}Q${question}`\n    const firstLine = document.createElement('tr')\n    const entete1 = ligne1.shift()\n    if (entete1) appendCell({ line: firstLine, icell: entete1, indexCol: 0, indexLine: 0, tag: 'th', classes, NoEx, NoQ })\n    for (let i = 0; i < ligne1.length; i++) {\n      appendCell({ line: firstLine, icell: ligne1[i], indexCol: i + 1, indexLine: 0, tag: 'td', classes, NoEx, NoQ })\n    }\n    table.appendChild(firstLine)\n    // tableau de proportionnalité conforme à ceux définis dans src/lib/2d/tableau.js\n    const secondLine = document.createElement('tr')\n    const entete2 = ligne2.shift()\n    if (entete2) appendCell({ line: secondLine, icell: entete2, indexCol: 0, indexLine: 1, tag: 'th', classes, NoEx, NoQ })\n    for (let i = 0; i < ligne2.length; i++) {\n      appendCell({ line: secondLine, icell: ligne2[i], indexCol: i + 1, indexLine: 1, tag: 'td', classes, NoEx, NoQ })\n    }\n    table.appendChild(secondLine)\n    const spanCheckOuterHTML = `<span id=\"resultatCheckEx${numeroExercice}Q${question}\"></span>`\n    // pour l'instant je retourne l'objet complet avec le HTML de la table dans sa propriété output,\n    // mais il sera peut-être possible de ne retourner que le HTML comme pour ajouteChampTexteMathlive...\n    tableauMathlive.output = table.outerHTML + spanCheckOuterHTML\n    return tableauMathlive\n  }\n\n  /**\n   * Les listes de tableauColonneLigne sont des listes de strings.\n   * Celles des tableaux Mathlive, doivent être des Icell[] (interface exportée par ce fichier).\n   * Cette fonction prends les différentes listes de tableauColonneLigne en argument et retourne un tableau pour AddTabDblEntry\n   * @param tabEntetesColonnes\n   * @param tabEntetesLignes\n   * @param tabLignes\n   */\n  static convertTableauToTableauMathlive (lgn1: string[], lgn2: string[], gras: boolean = false, color: string = 'black'): Itableau {\n    const nbColonnes = Math.max(lgn1.length, lgn2.length)\n    const ligne1: Icell[] = []\n    const ligne2: Icell[] = []\n    for (const str of lgn1) {\n      ligne1.push({ texte: str, latex: true, gras, color })\n    }\n    for (const str of lgn2) {\n      ligne2.push({ texte: str, latex: true, gras, color })\n    }\n    return { ligne1, ligne2, nbColonnes }\n  }\n}\n\nexport class AddTabDbleEntryMathlive {\n  id!: string // ce sera nécessaire pour retrouver le tableau s'il y en a plusieurs dans la page.\n  numeroExercice: number\n  numeroQuestion: number\n  output!: string\n  raws!: Raws\n  headingCols: Icell[]\n  headingLines: Icell[]\n  classes: string\n  private constructor (numeroExercice: number, question: number, tableau: ItabDbleEntry, classes: string) {\n    if (numeroExercice == null) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-expect-error\n      window.notify('AddTabDbleEntryMathlive a besoin absolument d\\'un numero d\\'exercice')\n    }\n    this.headingCols = tableau.headingCols\n    this.headingLines = tableau.headingLines\n    this.numeroExercice = numeroExercice ?? 0\n    this.numeroQuestion = question\n    this.id = `tabMLEx${this.numeroExercice}Q${this.numeroQuestion}`\n    this.raws = tableau.raws\n    this.classes = classes\n  }\n\n  static create (numeroExercice: number, question: number, tableau: ItabDbleEntry, classes: string) {\n    // tableau doit contenir headingCols et headingLines, qui peuvent être vides, mais doivent être fournis.\n    if (!Array.isArray(tableau.headingCols) || !Array.isArray(tableau.headingLines)) {\n      notify('ajouteTableauMathlive : vérifiez vos paramètres !', { headingCols: tableau.headingCols, headingLines: tableau.headingLines })\n    }\n    const tableauMathlive: AddTabDbleEntryMathlive = new AddTabDbleEntryMathlive(numeroExercice, question, tableau, classes)\n    const table = document.createElement('table')\n    const NoEx = numeroExercice ?? 0\n    const NoQ = question\n    table.className = 'tableauMathlive'\n    table.id = `tabMathliveEx${numeroExercice}Q${question}`\n    const firstLine = document.createElement('tr')\n    table.appendChild(firstLine)\n    if (tableau.headingCols != null) {\n      fillLine({ line: firstLine, content: tableau.headingCols, index: 0, tag: 'th', classes, NoEx, NoQ })\n    }\n    // lignes suivantes\n    for (let j = 0; j < tableau.raws.length; j++) {\n      const newLine = document.createElement('tr')\n      table.appendChild(newLine)\n      if (tableau.headingLines != null) {\n        appendCell({ line: newLine, icell: tableau.headingLines[j], indexCol: 0, indexLine: tableau.headingCols != null ? 1 + j : j, tag: 'th', classes, NoEx, NoQ })\n        /*\n        const head = document.createElement('th')\n        head.textContent = `$${tableau.headingLines[j]}$`\n        newLine.appendChild(head)\n        */\n      }\n      const raw = tableau.raws[j]\n      if (Array.isArray(raw) && raw.length > 0) {\n        for (let i = 0; i < raw.length; i++) {\n          appendCell({ line: newLine, icell: raw[i], indexCol: tableau.headingLines != null ? i + 1 : i, indexLine: tableau.headingCols != null ? 1 + j : j, tag: 'td', classes, NoEx, NoQ })\n        }\n      }\n    }\n    const spanCheckOuterHTML = `<span id=\"feedbackEx${numeroExercice}Q${question}\"></span>`\n    // pour l'instant je retourne l'objet complet avec le HTML de la table dans sa propriété output,\n    // mais il sera peut-être possible de ne retourner que le HTML comme pour ajouteChampTexteMathlive...\n    tableauMathlive.output = table.outerHTML + spanCheckOuterHTML\n    return tableauMathlive\n  }\n\n  /**\n   * Les listes de tableauColonneLigne sont des listes de strings.\n   * Celles des tableaux Mathlive, doivent être des Icell[] (interface exportée par ce fichier).\n   * Cette fonction prends les différentes listes de tableauColonneLigne en argument et retourne un tableau pour AddTabDblEntry\n   * @param tabEntetesColonnes\n   * @param tabEntetesLignes\n   * @param tabLignes\n   */\n  static convertTclToTableauMathlive (tabEntetesColonnes: string[], tabEntetesLignes: string[], tabLignes: string[], gras: boolean = true, color: string = 'black') {\n    const headingCols: Icell[] = []\n    for (const str of tabEntetesColonnes) {\n      headingCols.push({ texte: str, latex: true, gras, color })\n    }\n    const headingLines: Icell[] = []\n    for (const str of tabEntetesLignes) {\n      headingLines.push({ texte: str, latex: true, gras, color })\n    }\n    const raws: Array<Icell[]> = []\n    const haveHeadC = headingCols.length > 0\n    const haveHeadL = headingLines.length > 0\n    if (!haveHeadL || !haveHeadC) throw Error('Un tableau à double entrée doit avoir des entête de colonne et des entête de ligne')\n    // on boucle sur les lignes mais il peut ne pas y avoir de headingLines ! On doit alors diviser le nombre de cellules par le nombre de colonnes à remplir.\n    const nbCols = haveHeadL ? headingCols.length - 1 : headingCols.length\n    const nbLines = headingLines.length\n    for (let i = 0; i < nbLines; i++) {\n      const raw: Icell[] = []\n      for (let j = 0; j < nbCols; j++) {\n        raw.push({ texte: tabLignes[i * nbCols + j], latex: true, gras, color })\n      }\n      raws.push(raw)\n    }\n    return { headingLines, headingCols, raws }\n  }\n}\n"],"names":["appendCell","line","icell","indexCol","indexLine","tag","classes","NoEx","NoQ","cell","element","classe","spanFeedback","fillLine","content","index","i","AddTabPropMathlive","numeroExercice","question","tableau","__publicField","notify","ligne1","ligne2","tableauMathlive","table","firstLine","entete1","secondLine","entete2","spanCheckOuterHTML","lgn1","lgn2","gras","color","nbColonnes","str","AddTabDbleEntryMathlive","j","newLine","raw","tabEntetesColonnes","tabEntetesLignes","tabLignes","headingCols","headingLines","raws","haveHeadC","haveHeadL","nbCols","nbLines"],"mappings":"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"}