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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"}