La façon la plus simple de mettre une figure MathGraph32 en ligne est d’utiliser des balises HTML : voir cet article
Mais les utilisateurs les plus avertis en JavaScript peuvent vouloir utiliser MathGraph32 dans leur propre application en ligne.
Nous allons expliquer dans ce premier article comment appeler le loader de MathGraph32 de façon à pouvoir interagir avec la figure.
Voici ci-dessous le code HTML d’une page lançant une figure MathGraph32 :
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="MathGraph32" /> <title>Feuille de travail dynamique MathGraph32</title>
<style type="text/css">
#errors {color: red;}
svg {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
-webkit-tap-highlight-color: transparent; /*Nécessaire sur ipad pour ne pas avoir de rectangle gris sélectionné lors des touch events */
}
</style>
</head>
<body>
<div id = "mtg32div">
</div>
<script type="text/javascript" src="https://www.mathgraph32.org/js/mtgLoad/mtgLoad.min.js"></script>
<script type="application/javascript">
(function autostart() {
var svgOptions = {
idSvg: "mtg32svg", width : "900", height : "500"
}
var mtgOptions = {
fig: "TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAAb#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAQAAFPAAAAAAAAAAAAQAgAAAAAAAAAAAUAAUBtYAAAAAAAQG464UeuFHsAAAACAP####8AAAAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAFAAFAdHAAAAAAAEBh+uFHrhR7#####wAAAAEACUNDZXJjbGVPQQD#####AAAAAAAAAAEAAAABAAAAAv####8AAAABAA5DU3VyZmFjZURpc3F1ZQD#####AAAA#wAAAAAABQAAAAMAAAACAP####8AAAD#ABAAAUEAAAAAAAAAAABACAAAAAAAAAAABQABQIHYAAAAAABAcA1wo9cKPv###############w==",
isEditable: false
}
mtgLoad("mtg32div", svgOptions, mtgOptions).then(
(mtgApp) => {
console.log("mtg32 App loaded", mtgApp)
/*
Ecrire ici éventuellement des lignes de code pour interagir avec la figure MathGraph32
L'application est passée en paramètre, ici nommé mtgApp et on peut ensuite utiliser cette application pour interagir avec la figure
*/
}
).catch(
// La ligne suivante sert à traiter une erreur éventuelle lors du lancement de MathGraph32
(error) => {if (error) console.error(error)}
)
})()
</script>
</body>
</html>
Pour pouvoir utiliser MathGraph32 en ligne la présence de la ligne suivante est indispensable :
<script type="text/javascript" src="https://www.mathgraph32.org/js/mtgLoad/mtgLoad.min.js"></script>
Le chargement de l’application MathGraph32 se fait grâce à l’appel de la fonction mtgLoad("mtg32div", svgOptions, mtgOptions)
qui renvoie une promesse qui, quand elle est résolue, lance la fonction suivante de la variable mtgApp : (mtgApp) => {}.
C’est dans cette fonction que vous devez utiliser l’application mtgApp pour interagir avec la figure.
Suivant la valeur du paramètre isEditable (booléen) l’application mtgApp fournie sera soit un player MathGraph32 (la figure est affichée, on peut interagir avec elle, bouger des points mobiles) soit un éditeur MathGraph32 (la figure est affichée dans une fenêtre contenant les outils du logiciel, on peut modifier la figure).
Examinons les trois paramètres passés à la fonction mtgLoad :
Voici ci-dessous ce que donne ce premier affichage de figure MathGraph32 :
Reprenons le même code que ci-dessus mais cette fois en modifiant la paramètre mtgOptions avec isEditable à true.
Voici ci-dessous ce qu’on obtient (il a fallu ici créer un autre div pour contenir cett application MathGraph32 puisqu’elle est dans la même page que la figure ci-dessus :
Les utilisateurs avertis remarqueront que, pour la deuxième figure, toutes les icônes de la barre d’outils horizontale ne sont pas visibles.
Nous avons la possibilité de rajouter un paramètre supplémentaire à l’objet mtgOptions, paramètre nommé zoomFactor. Il sera utilisé pour réduire la taille des icônes du logiciel s’il est compris entre 0 et 1 et les agrandir s’il est supérieur à 1.
Voici ce que donne alors la figure ci-dessus en remplaçant les lignes définissant le paramètre mtgOptions par les lignes suivantes :
var mtgOptions = {
fig: "TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAAb#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAQAAFPAAAAAAAAAAAAQAgAAAAAAAAAAAUAAUBtYAAAAAAAQG464UeuFHsAAAACAP####8AAAAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAFAAFAdHAAAAAAAEBh+uFHrhR7#####wAAAAEACUNDZXJjbGVPQQD#####AAAAAAAAAAEAAAABAAAAAv####8AAAABAA5DU3VyZmFjZURpc3F1ZQD#####AAAA#wAAAAAABQAAAAMAAAACAP####8AAAD#ABAAAUEAAAAAAAAAAABACAAAAAAAAAAABQABQIHYAAAAAABAcA1wo9cKPv###############w==",
isEditable: true,
zoomFactor: 0.95
}
En diminuant nos icônes de 5% (zoomFactor à 0,95) nous avons maintenant toutes nos icônes visibles.
Pour la version éditeur de l’application, la seule icône qui puisse avoir un fonctionnement personnalisable est l’icône d’enregistrement.
Vous pouvez affecter à cette icône une fonction qui sera exécutée quand on cliquera dessus.
Cela se fait via l’objet mtgOptions qui possède deux options à cet effet :
Voici ci-dessous le code d’une page HTML qui va permettre d’éditer une figure et qui, si on clique sur l’icône d’enregistrement, affichera le code Base64 de la figure au moment où on a cliqué sur ce bouton.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="generator" content="MathGraph32" /> <title>Feuille de travail dynamique MathGraph32</title>
<style type="text/css">
#errors {color: red;}
svg {
-webkit-user-select: none; /* Chrome all / Safari all */
-moz-user-select: none; /* Firefox all */
-ms-user-select: none; /* IE 10+ */
-webkit-tap-highlight-color: transparent; /*Nécessaire sur ipad pour ne pas avoir de rectangle gris sélectionné lors des touch events */
}
</style>
</head>
<body>
<div id = "mtg32div">
</div>
<script type="text/javascript" src="https://www.mathgraph32.org/js/mtgLoad/mtgLoad.min.js"></script>
<script type="application/javascript">
(function autostart() {
let app
const svgOptions = {
idSvg: "mtg32svg", width : "900", height : "500"
}
const mtgOptions = {
fig: "TWF0aEdyYXBoSmF2YTEuMAAAABM+TMzNAAJmcv###wEA#wEAAAAAAAAAAAUeAAACygAAAQEAAAAAAAAAAQAAAAb#####AAAAAQAKQ0NhbGNDb25zdAD#####AAJwaQAWMy4xNDE1OTI2NTM1ODk3OTMyMzg0Nv####8AAAABAApDQ29uc3RhbnRlQAkh+1RELRj#####AAAAAQAKQ1BvaW50QmFzZQD#####AAAAAAAQAAFPAAAAAAAAAAAAQAgAAAAAAAAAAAUAAUBtYAAAAAAAQG464UeuFHsAAAACAP####8AAAAAABAAAAAAAAAAAAAAAEAIAAAAAAAAAAAFAAFAdHAAAAAAAEBh+uFHrhR7#####wAAAAEACUNDZXJjbGVPQQD#####AAAAAAAAAAEAAAABAAAAAv####8AAAABAA5DU3VyZmFjZURpc3F1ZQD#####AAAA#wAAAAAABQAAAAMAAAACAP####8AAAD#ABAAAUEAAAAAAAAAAABACAAAAAAAAAAABQABQIHYAAAAAABAcA1wo9cKPv###############w==",
isEditable: true,
zoomFactor: 0.95,
avertOnSave: false,
functionOnSave: () => {
alert(app.getBase64Code())
}
}
mtgLoad("mtg32div", svgOptions, mtgOptions).then(
(mtgApp) => {
console.log("mtg32 App loaded", mtgApp)
app = mtgApp
}
).catch(
(error) => {if (error) console.error(error)}
)
})()
</script>
</body>
</html>
Un comportement analogue a été prévu dans la figure ci-dessus.
Vous remarquerez que si mtgApp est une application MathGraph32 (lecteur ou éditeur), la fonction getBase64Code() renvoie le code Base64 de la figure.
Voici ci-dessous les paramètres disponibles pour l’objet svgOptions passé en deuxième paramètre de la fonction mtgLoad :
Nom du paramètre | Type | Valeur par défaut | Description |
width | nombre entier | 900 | Largeur du svg qui contiendra la figure (cas du player) ou l’application (cas de l’éditeur) |
height | nombre entier | 650 | Hauteur du svg qui contiendra la figure (cas du player) ou l’application (cas de l’éditeur) |
idSvg | string | ’’ | id du svg qui sera créé dans l’id fourni comme conteneur |
Voici ci-dessous les paramètres disponibles pour l’objet mtgOptions passé en troisième paramètre de la fonction mtgLoad :
Nom du paramètre | Type | Valeur par défaut | Description |
fig | string ou objet | ’’ | Dans le cas d’une string, code Base64 valide de la figure à afficher. Le cas objet est expliqué au-dessous de ce tableau et ne s’applique que pour l’éditeur |
Cas d’une string : doit contenir un code Base64 valide d’une figure MathGraph32 | |||
Cas d’un objet : cet objet peut contenir les propriétés suivantes | |||
isEditable | booléen | true | Passer true pour lancer l’application complète MathGraph32, false pour l’afficher seulement sans possibilité d’édition (lecteur MathGrapj32) |
zoomFactor | nombre | 1 | Facteur d’agrandissement ou de réduction des icones (éditeur seulement) |
level | entier | 3 | Niveau de fonctionnement du logiciel (version éditeur seulement) : 0 pour élémentaire, 1 pour niveau collège, 2 pour niveau avancé sans nombres complexes, 3 pour niveau avancé avec nombres complexes |
displayOnLoad | booléen | true | lecteur seulement : passer false si on ne veut pas que la figure soit affichée dès qu’elle est prête |
displayMeasures | booléen | true | Editeur seulement : passer false si vous ne voulez pas que lors d’une mesure le résultat de la mesure soit affiché dans la figure automatiquement |
isInteractive | booléen | true | lecteur seulement : Passer false pour ne pas permettre de bouger les points mobiles (lecteur only) |
loadApi | booléen | false | Passer true pour donner la possibilité d’utiliser l’API de MathGraph32 (possibilité d’ajouter des objets sur la figure et d’affecter des écouteurs d’événements sur des objets) |
loadCoreOnly | booléen | false | Ne charge que les fonctions de base du lecteur MathGraph32 sans possibilité d’afficher une figure (pour par exemple n’utiliser que des fonctions de MathGraph32 liées au calcul) |
loadCoreWithMathJax | booléen | false | Ne charge que les fonctions de base du lecteur MathGraph32 sans possibilité d’afficher une figure mais avec chargement de MathJax (pour par exemple n’utiliser que des fonctions de MathGraph32 liées au calcul ou utiliser le contenu d’affichages LaTeX mais sans les afficher) |
pointsAuto | booléen | false | Editeur seulement : passer true pour créer automatiquement un point quand on clique sur un endroit vide (avec certains outils) |
randomOnInit | booléen | false | lecteur seulement : passer true pour lancer l’aléatoire à l’initialisation de la figure |
stylePointCroix | booléen | false | Editeur seulement : Passer true pour que le style de point au démarrage soit la grande croix |
codeBase64 | booléen | true | Passer false pour retirer l’outil permettant d’obtenir le code Base64 de la figure |
open | booléen | true | Passer false pour retirer l’outil permettant d’ouvrir une figure |
save | booléen | true | Passer false pour retirer l’outil permettant de sauvegarder une figure |
newFig | booléen | true | Passer false pour retirer l’outil permettant de créer une nouvelle figure |
options | booléen | true | Passer false pour retirer l’outil permettant de changer les options de la figure (ajouter ou retirer des outils par exemple) |
onlyPoints | booléen | false | Passer true pour que les outils de transformation ne s’appliquent qu’à des points |
dys | booléen | false | Passer true pour démarrer l’interface avec un affichage adapté aux utilisateurs "dys" (traits épais, points en grande croix, taille des noms plus grande) |
functionOnSave | fonction | null | callBack appelée au clic sur le bouton d’enregistrement |
avertOnSave | booléen | true | si functionOnSave est présent et si avertOnSave est false, il n’y aura pas de message d’avertissement quand on clique sur le bouton d’enregistrement (true par défaut) |
callBackAfterReady | fonction | null | callBack appelée lorsque la figure est chargée et affichée, les méthodes de MtgApp peuvent alors être utilisées (inutile pour player et coreOnly) |
bplayer | booléen | false | Passer true pour ajouter une propriété player (de type MtgAppLecteur) à l’objet MtgApp retourné (utile pour les exercices de construction) |
language | string | ’’ | Passer fr ou en ou es pour forcer la langue (sinon détection automatique d’après les headers envoyés par le navigateur) |
electron | booléen | false | Editeur only : passer true si destiné à fonctionner avec la version electron |
construction | booléen | false | Si on édite un exercice de construction il faut que ce paramètre soit true (ex param edition) |
loadApi | booléen | false | true si on veut pouvoir ajouter des éléments à la figure par programmation ou interagir avec la figure en associant des écouteurs d’événements sur des objets de la figure. |
Compléments pour le paramètre fig dans le cas éditeur :
Dans le cas éditeur, la paramètre fig peut être une string (code Base64 d’une figure valide) ou un objet.
Dans le cas d’un objet, celui-ci est défini par trois propriétés du type string :
Pour en faire plus, il nous reste maintenant à apprendre comment interagir avec les figures ou lui rajouter des objets par programmation JavaScript.
Pour cela il faut utiliser l’api de MathGraph32 en mettant la propriété addApi du paramètre mtgOptions à true.
Nous allons expliquer cela dans les articles suivants.
Une remarque : si vous ne souhaitez pas utiliser l’api de MathGrap32, ne mettez pas le paramètre addApi à true car cela fait grossir inutilement le code JavaScript de l’application.