V3 Groupe de travail - mathalea/mathalea GitHub Wiki

État des lieux

Liste des fonctionnalités

Objectifs

Partir d'une feuille blanche, utiliser des outils modernes (plus de SemanticUI, plus de JQuery, plus de manipulation de string d'HTML) et refaire les fonctionnalités actuelles de façon plus modulaire et plus maintenable.

Lorsque les fonctionnalités actuels seront de retour, on pourra ajouter de nouvelles fonctionnalités.

La v3 sera aussi l'occasion de moderniser l'interface utilisateur.

ToDo

  • Nouveau dépôt qui reprend exercices et modules de l'actuel
  • Configuration viteJs + TypeScript
  • displayExercice(Promise, HTMLDivElement) => Promise
  • displayQuestion(Promise, numQuestion, HTMLDivElement) => Promise
  • displayCorrection(Promise, HTMLDivElement) => Promise
  • displayCorrectionQuestion(Promise, HTMLDivElement) => Promise
  • displayIntroEtConsigne(exerciceEtParams) => HTMLDivElement
  • lister et gérer les exercices qui ont un affichage particulier et ceux qui attendent un event exercicesAffiches
  • displayParamsExercice(exerciceEtParams) => HTMLDivElement
  • Gérer l'ordre d'affichage des exercices (à l'heure actuelle la vitesse de chargement peut modifier l'ordre)
  • updateExercice(exerciceEtParams) modifie la div de l'exercice avec ses nouveaux paramètres
  • updateUrl(exercicesChoisisEtParams)
  • buildJsonExercices()
  • buildReferentiel()
  • displayMenu(sectionActive) => HTMLDivElement
  • updateMenu(sectionActive) injecte dans le DOM les éléments nécessaires à la section, réalise une animation et affiche le menu
  • updateOrdreDesExercices() met à jour l'ordre de exercicesChoisisEtParams et met à jour l'affichage
  • Gérer les chargements de modules :
    • MathLive
    • IEP
    • xCas
    • MG32
    • Scratch

Séparation du travail

  • Chantier display

    • Afficher les div des exercices
    • Voir les adaptations à apporter aux exercices particuliers (animations Instrumenpoche, mathalea2d, ceux qui attendent l'event exercicesAffiches...)
    • Tester l'interactivité
  • Chantier json et menus

    • Faire un buildJsons() en nodeJS
    • Générer le HTML de ces menus
  • Chantier interface graphique

    • Si framework il y a, il devra avoir une place très limitée pour pouvoir en changer facilement

Dans un 2e temps, il faudra réfléchir aux fonctionnalités avancées et aux différentes sorties

Tests

Liste de tests créée par Cédric

  • Exercices classiques (6C10-1)
  • Exercice avec MathALEA2D (6G10)
  • Exercice avec IEP après clic sur bouton (5G40)
  • Exercice avec IEP (3G11)
  • Exercice avec Scratch (6Algo10)
  • Exercice de DNB / CRPE...

Fonctionnement du moteur

  • exercicesChoisisEtParams est une liste d'objet exerciceEtParams
  • exerciceEtParams est un objet {url, seed, nbQuestions, sup, sup2, sup3, sup4, objetParametres, typeDAffichage, div}
    • objetParametres pour de futurs exercices pour avoir plus de souplesses que sup, sup2... ? À réfléchir pour le codage dans l'url
    • typeDAffichage : 'web'|'diaporama'|'latex'|'amc'...

referentiel2022.json

{
 can : {
    6e : {
        can6C : {
          can6C01 : UUID,
          can6C02 : UUID,
        }
    }
  },
 3e : 
 { 3G2 : 
   {
    3G20 : UUID,
    3G21 : UUID,
   },
   3G3 : 
   {
    3G30 : UUID,
    3G31 : UUID,
   }
 }
}

Les différents référentiel devront permettre de construire l'arbre fermé avec les niveaux et chapitres. Au clic sur un niveau ou un chapitre, on récupère les identifiants des items et les UUID.

exercicesDisponiblesReferentiel2022.json

{
  3e : {
    3G2 : {
            UUID : {
              titre: "...",
              tags: [amcReady, interactifReady...],
              themes: [Pythagore, ...]
              datePublication: "...",
              dateModif: "..."
           },
           UUID : ...
}

Proposition pour exercicesAleatoiresDisponibles (Rémi 23/07) :

{
  {
    "uuid": "gfdg345",
    "url": "6e/6C10.js",
    titre: "Utiliser les tables de multiplications",
    tags: ["amcReady", "interactifReady"...],
    themes: ["Pythagore", ...],
    datePublication: "...",
    dateModif: null
  },
{
    "uuid":"azertp",
    "url": 'can/6e/can6N20.js',
    titre: "Écriture décimale",
    tags: [amcReady, interactifReady...],
    themes: ["Numération", ...],
    datePublication: "...",
    dateModif: "..."
  },
}

Faire l'équivalent avec exercicesDisponibles6.json (sans CAN), exercicesDisponiblesCan6.json...

On connait la liste des UUID à afficher, on filtre et on récupère les informations utiles à la construction du menu.

Remarque : les référentiels ne sont pas obligatoires, on peut imaginer un affichage par mots-clés ou par mot contenu dans le titre. Il sera aussi possible d'ouvrir un référentiel et de le combiner avec un filtre suivant la recherche de l'utilisateur.

UUIDtoUrl

{ "UUID" : "exercices/3e/3G20.ts" }

Au clic, on récupère l'URL du constructeur de l'exercice avant d'en créer une instance

Rétrocompatibilité

  • Cohabitation des deux moteurs ?
  • Anciennes url qui pointent vers les nouvelles UUID ?

Gestion des url

mathalea.html?id=45erere,s=1,s2=false,n=10&id=bvcbv&n=10&s=2&serie=fdsfd&v=...&z=... mathalea.html?ex=3G20 => mathalea.html?id=45erere

settingsToUrl() : contraindre la mise à jour avec un temps minimum (1s ?)

Utiliser l'objet natif URL

Raccourcir les url ? Nous ou un serveur externe

URL <=> listeOrdonneeExercicesEtParametres [{UUID, paramètres, ordre: 1}, {UUID2, paramètres, ordre: 2}, ...]

liste à garder dans un store ?

UUID

Comment les créer ? Comment s'assurer de ne pas créer de doublons Processus retenu par Jean-claude -> La fonction builJsonDictionnaireExercices() de exercicesToJson.js parcours l'ensemble des exercices. -> Le dictionnaire est chargé si il est présent, sinon il est créé. -> La liste des uuids déjà utilisées (si il y en a) est créée afin d'éviter de réutiliser ces uuids. -> Les uuids sont créées en même temps que les exercices sont ajoutés au dictionnaire exercicesDisponiblesReferentiel2022.json -> On vérifie bien entendu que la nouvelle uuids n'est pas dans la liste de celles qui sont déjà utilisées. -> à ce moment là, on renseigne deux propriétés exportées dans le fichier de l'exercice : uuid et ref. -> La présence de ces propriétés signifie que l'exercice est déjà dans le dictionnaire (qui contient aussi l'uuid de chaque entrée) donc il est ignoré. Note: La classification des exercices dans le dictionnaire (niveau, chapitre) est basée sur le nom du fichier. Il convient donc de respecter les préfixes communs à tous les exercices d'un même niveau. Les exercices dont le nom commence par beta ou P0 sont ignorés par le processus. Note: Aucune uuid ne doit être renseignée manuellement. Note: Pendant ce processus, deux autres fichiers sont alimentés : referentiel2022.json et uuidToUrl.json

Idées pour l'UI

  • Utiliser Quasar et Pinia ?
  • Les paramètres et la correction pourraient s'afficher en popup ou à la demande dessous en accordéon ou en remplacement...
  • L'aléatoire reste fixé à l'exercice, à la div
  • Le temps peut être paramètre exercice par exercice
  • Choix des différentes corrections
⚠️ **GitHub.com Fallback** ⚠️