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/2dinteractif-G7UZ3Yj1.js.map
{"version":3,"file":"2dinteractif-G7UZ3Yj1.js","sources":["../../src/modules/2dinteractif.js"],"sourcesContent":["import { point, tracePoint } from '../lib/2d/points.js'\nimport { polygone } from '../lib/2d/polygones.js'\nimport { colorToLatexOrHTML, ObjetMathalea2D } from './2dGeneralites.js'\nimport { context } from './context.js'\n\n/**\n * @author Rémi ANGOT\n * @param {number} x abscisse du point\n * @param {number} y ordonnée du point\n * @param {object} options over, out et click sont des objets pour le style css des évènements de la souris, radius, width, color, opacite, size, style sont les paramètres possibles pour la trace du point\n */\nfunction PointCliquable (x, y, options) {\n  ObjetMathalea2D.call(this, { })\n  const A = point(x, y)\n  this.point = A\n  if (!options) options = {}\n  const out = options.out || { opacity: 0 }\n  const over = options.over || { opacity: 0.5 }\n  const click = options.click || { opacity: options.opacite || 1 }\n  this.etat = false // Pour récupérer si le point est affiché ou pas\n  this.svg = function (coeff) {\n    let code\n    const trace = tracePoint(A, options.color || options.couleur || 'black')\n    trace.epaisseur = options.width || options.epaisseur || 1\n    trace.taille = options.size || options.taille || 3\n    trace.isVisible = false\n    trace.style = options.style || 'x'\n    code = `<g id=\"${this.id}\">\\n`\n    code += trace.svg(coeff) + '\\n'\n    // Le cercle est la zone d'effet pour les évènements\n    // Comme fill est à none, il faut ajouter pointer-events=\"visible\" cf https://www.smashingmagazine.com/2018/05/svg-interaction-pointer-events-property/\n    code += `<circle cx=\"${A.xSVG(coeff)}\" cy=\"${A.ySVG(coeff)}\" r=\"${(options.radius || options.rayon || 1) * coeff}\" fill=\"none\" pointer-events=\"visible\" />\\n`\n    code += '</g>'\n    return code\n  }\n\n  const gestionDeLaSouris = () => {\n    document.removeEventListener('exercicesAffiches', gestionDeLaSouris)\n    const groupe = document.getElementById(`${this.id}`)\n    const changeEtatPoint = (etat) => {\n      this.etat = etat\n    }\n    const mouseOutEffect = () => {\n      for (const key in out) {\n        try {\n          this.style[key] = out[key]\n        } catch (error) {\n          window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n        }\n      }\n    }\n    const mouseOverEffect = () => {\n      for (const key in over) {\n        try {\n          this.style[key] = out[key]\n        } catch (error) {\n          window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n        }\n      }\n    }\n    const mouseClick = () => {\n      if (this.etat) {\n        // On désactive le point\n        groupe.addEventListener('mouseover', mouseOverEffect)\n        groupe.addEventListener('mouseout', mouseOutEffect)\n        // On lui remet le style de out\n        for (const key in out) {\n          try {\n            this.style[key] = out[key]\n          } catch (error) {\n            window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n          }\n        }\n        this.etat = false\n        changeEtatPoint(false)\n      } else {\n        // On désactive les listeners\n        groupe.removeEventListener('mouseover', mouseOverEffect)\n        groupe.removeEventListener('mouseout', mouseOutEffect)\n        // On applique le style de click\n        for (const key in click) {\n          try {\n            this.style[key] = out[key]\n          } catch (error) {\n            window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n          }\n        }\n        this.etat = true\n      }\n    }\n\n    // On initialise avec le style de out\n    if (groupe) {\n      for (const key in out) {\n        try {\n          groupe.style[key] = out[key]\n        } catch (error) {\n          window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${groupe}`, { element: groupe, key })\n        }\n      }\n      groupe.addEventListener('mouseover', mouseOverEffect)\n      groupe.addEventListener('mouseout', mouseOutEffect)\n      groupe.addEventListener('click', mouseClick)\n    }\n  }\n  document.addEventListener('exercicesAffiches', gestionDeLaSouris)\n  this.stopCliquable = () => {\n    const groupe = document.getElementById(`${this.id}`)\n    // On retire tous les listener en le remplaçant par un clone\n    groupe.replaceWith(groupe.cloneNode(true))\n  }\n}\n\nexport function pointCliquable (...args) {\n  return new PointCliquable(...args)\n}\n\n/**\n * @author Rémi ANGOT\n * @param {number} x abscisse du point\n * @param {number} y ordonnée du point\n * @param {object} options over, out et click sont des ojets pour le style css des évènements de la souris, radius, width, color, size, style sont les paramètres possibles pour la trace du point\n */\nfunction RectangleCliquable (x1, y1, x2, y2, options) {\n  ObjetMathalea2D.call(this, { })\n  const A = point(x1, y1)\n  const B = point(x2, y1)\n  const C = point(x2, y2)\n  const D = point(x1, y2)\n  const rectangle = polygone(A, B, C, D)\n  const bordure = polygone(A, B, C, D)\n  if (!options) options = {}\n  const out = options.out || { opacity: 0 }\n  const over = options.over || { opacity: 0.2 }\n  const click = options.click || { opacity: 1 }\n  const couleur = options.couleur || '#f15929'\n  const cliquable = (options.cliquable !== undefined) ? options.cliquable : true\n  rectangle.hachures = options.hachures || false\n  rectangle.epaisseurDesHachures = options.epaisseurDesHachures || 4\n  bordure.epaisseur = options.epaisseur || 1\n  this.etat = options.etat || false // Pour récupérer si le rectangle est cliqué ou pas\n  // his.style = rectangle.style\n  this.svg = function (coeff) {\n    let code\n    rectangle.couleurDeRemplissage = colorToLatexOrHTML(options.color || options.couleur || options.couleurDeRemplissage || '#f15929')\n    rectangle.epaisseur = 0\n    rectangle.isVisible = false\n    code = `<g id=\"rectangle${this.id}\">\\n`\n    code += rectangle.svg(coeff) + '\\n'\n    code += '</g>'\n    code += bordure.svg(coeff)\n    return code\n  }\n  this.tikz = (coeff) => {\n    if (this.etat) bordure.couleurDeRemplissage = colorToLatexOrHTML(couleur)\n    bordure.hachures = rectangle.hachures\n    return bordure.tikz(coeff)\n  }\n\n  const gestionDeLaSouris = () => {\n    document.removeEventListener('exercicesAffiches', gestionDeLaSouris)\n    const groupe = document.getElementById('rectangle' + this.id)\n    const changeEtatPoint = (etat) => {\n      this.etat = etat\n    }\n    if (groupe) {\n      // On initialise avec le style de out ou de click suivant l'état\n      for (const key in out) {\n        try {\n          groupe.style[key] = (this.etat) ? click[key] : out[key]\n        } catch (error) {\n          window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${groupe}`, { element: groupe, key })\n        }\n      }\n    }\n    const mouseOverEffect = () => {\n      for (const key in over) {\n        try {\n          groupe.style[key] = out[key]\n        } catch (error) {\n          window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n        }\n      }\n    }\n    const mouseOutEffect = () => {\n      for (const key in out) {\n        try {\n          groupe.style[key] = out[key]\n        } catch (error) {\n          window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n        }\n      }\n    }\n    const mouseClick = () => {\n      if (this.etat) {\n        // On désactive le point\n        groupe.addEventListener('mouseover', mouseOverEffect)\n        groupe.addEventListener('mouseout', mouseOutEffect)\n        // On lui remet le style de out\n        for (const key in out) {\n          try {\n            groupe.style[key] = out[key]\n          } catch (error) {\n            window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n          }\n        }\n        this.etat = false\n        changeEtatPoint(false)\n      } else {\n        // On désactive les listeners\n        groupe.removeEventListener('mouseover', mouseOverEffect)\n        groupe.removeEventListener('mouseout', mouseOutEffect)\n        // On applique le style de click\n        for (const key in click) {\n          try {\n            groupe.style[key] = click[key]\n          } catch (error) {\n            window.notify(error.message + `\\nProblème pour modifier style.${key} sur ${this}`, { element: this, key })\n          }\n        }\n        this.etat = true\n      }\n    }\n    if (groupe && cliquable) {\n      groupe.addEventListener('mouseover', mouseOverEffect)\n      groupe.addEventListener('mouseout', mouseOutEffect)\n      groupe.addEventListener('click', mouseClick)\n    }\n  }\n  document.addEventListener('exercicesAffiches', gestionDeLaSouris)\n  this.stopCliquable = () => {\n    const groupe = document.getElementById(`${this.id}`)\n    // On retire tous les listener en le remplaçant par un clone\n    groupe.replaceWith(groupe.cloneNode(true))\n  }\n}\n\nexport function rectangleCliquable (...args) {\n  return new RectangleCliquable(...args)\n}\n\nexport function fractionCliquable (x, y, unites, denominateur, options) {\n  const objets = []\n  if (!options) options = {}\n  const longueur = options.longueur || 4\n  const ecart = options.ecart || 1\n  const hauteur = options.hauteur || 1\n  const liste1 = options.liste1 || []\n  const liste2 = options.liste2 || []\n  let couleur1 = options.couleur1 || '#f15929'\n  let couleur2 = options.couleur2 || '#1DA962'\n  if (!context.isHtml) {\n    couleur1 = options.couleur1 || 'gray'\n    couleur2 = options.couleur2 || 'lightgray'\n  }\n  const hachures1 = options.hachures1 || false\n  const hachures2 = options.hachures2 || false\n  const couleur = options.couleur || (liste1.length === 0 ? couleur1 : 'white')\n  const cliquable = (options.cliquable !== undefined) ? options.cliquable : true\n  let O\n  for (let i = 0; i < unites; i++) {\n    O = point(x + i * (longueur + ecart), y)\n    for (let j = 0; j < denominateur; j++) {\n      if (liste1.includes(i * denominateur + j + 1)) {\n        objets.push(rectangleCliquable(O.x + j * longueur / denominateur, y, O.x + (j + 1) * longueur / denominateur, y + hauteur,\n          { cliquable, etat: true, couleur: couleur1, hachures: hachures1 }))\n      } else if (liste2.includes(i * denominateur + j + 1)) {\n        objets.push(rectangleCliquable(O.x + j * longueur / denominateur, y, O.x + (j + 1) * longueur / denominateur, y + hauteur,\n          { cliquable, etat: true, couleur: couleur2, hachures: hachures2 }))\n      } else {\n        objets.push(rectangleCliquable(O.x + j * longueur / denominateur, y, O.x + (j + 1) * longueur / denominateur, y + hauteur, { cliquable, couleur, etat: false }))\n      }\n    }\n  }\n  return objets\n}\n"],"names":["PointCliquable","x","y","options","ObjetMathalea2D","A","point","out","over","click","coeff","code","trace","tracePoint","gestionDeLaSouris","groupe","changeEtatPoint","etat","mouseOutEffect","key","error","mouseOverEffect","mouseClick","pointCliquable","args","RectangleCliquable","x1","y1","x2","y2","B","C","D","rectangle","polygone","bordure","couleur","cliquable","colorToLatexOrHTML","rectangleCliquable","fractionCliquable","unites","denominateur","objets","longueur","ecart","hauteur","liste1","liste2","couleur1","couleur2","context","hachures1","hachures2","O","i","j"],"mappings":"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"}