kernel/loadTextes.js

import { textes, getLanguage } from './kernel'

let lastLanguage, wasForEditor

/**
 * Initialise les textes (exportés par kernel), appelé par le loader
 * @param {string} language
 * @param {boolean} isForEditor
 * @returns {Promise<undefined>}
 */
async function loadTextes (language, isForEditor) {
  const lang = language || getLanguage()
  // attention, si on a déjà été appelé pour le player et qu'on est rappelé pour l'éditeur faut charger ce qu'il manque
  if (lang === lastLanguage && (wasForEditor || !isForEditor)) {
    // on nous demande la dernière langue chargée, c'est déjà fait
    return
  }
  if (lastLanguage && wasForEditor) {
    console.warn(Error(`Language ${lang} will override ${lastLanguage} previously loaded for all mathgraph instances of this page`))
  }
  let promises
  // si on a déjà chargé les textes de l'éditeur, faut le refaire quoi qu'il arrive,
  // sinon on pourrait avoir les textes de l'éditeur dans une langue et ceux du player dans une autre
  if (wasForEditor) {
    isForEditor = true
  } else {
    wasForEditor = isForEditor
  }
  if (lang === 'fr') {
    promises = [import('../textes/textesFr.js')]
    if (isForEditor) promises.push(import('../textes/textesFrAdd.js'))
  } else if (lang === 'es') {
    promises = [import('../textes/textesEs.js')]
    if (isForEditor) promises.push(import('../textes/textesEsAdd.js'))
  } else {
    promises = [import('../textes/textesEn.js')]
    if (isForEditor) promises.push(import('../textes/textesEnAdd.js'))
  }
  // on ajoute les textes chargés à l'objet textes du kernel
  return Promise.all(promises).then(esModules => {
    // on ajoute les textes dans l'ordre du tableau, donc le add en dernier
    for (const esModule of esModules) Object.assign(textes, esModule.default)
    lastLanguage = lang
  })
}

export default loadTextes