legacy/outils/zoneStyleMathquill/listeTabulations.js

/**
 * Objet manipulé par les ≠ fonctions de ce module, qui sert de singleton pour toutes les zsm de la page courante
 * @type {ZoneStyleMathquillBase[]}
 */
let listeTabulations = []

/**
 * Cherche elt dans la liste, si on le trouve et qu’il a une propriété prevTab et que cet id est dans notre liste on le focus, sinon on focus elt, sinon le premier de la liste
 * @param {ZoneStyleMathquillBase} elt
 * @returns {undefined}
 */
export function prevTabFocus (elt) {
  if (listeTabulations.length === 0) return
  const exists = listeTabulations.includes(elt)
  if (exists) {
    if (elt.prevTab !== undefined) {
      // on a trouvé l’élément et il a une propriété prevTab (un id), on le cherche dans la liste
      const prevTab = listeTabulations.find(e => e.id === elt.prevTab)
      if (prevTab) return prevTab.focus()
      else return
    } else {
      let i = listeTabulations.indexOf(elt) + 1
      i = (i >= listeTabulations.length) ? 0 : i
      return listeTabulations[i].focus()
    }
  }
  // sinon le premier de la liste
  listeTabulations[0].focus()
}

/**
 * lance blur() sur toutes les zones (sauf celle passée en argument)
 * @param {ZoneStyleMathquillBase} elt
 */
export function blurAllTabs (elt) {
  for (const tab of listeTabulations) {
    if (tab !== elt) tab.blur()
  }
}

/**
 * Ajoute un élément à la liste
 * @param {ZoneStyleMathquillBase} elt
 */
export function addTab (elt) {
  listeTabulations.push(elt)
}
/**
 * Retire elt de la liste (s’il y était)
 * @param {HTMLElement} elt
 */
export function removeTab (elt) {
  if (!elt) return // on nous demande de retirer rien, on s’arrête pas à si peu…
  listeTabulations = listeTabulations.filter(tab => tab !== elt)
}