cisstech / platon

Platform for Learning and Teaching Online
Other
13 stars 3 forks source link

Pas de "<" ou autres dans les scripts d'exercice (parseur TS) #15

Closed Ofghanirre closed 1 year ago

Ofghanirre commented 1 year ago

Salut ! J'espère que tu vas bien!

J'ai remarqué un comportement dérangeant dans l'écriture de code TS dans la balise builder sur PLaTon:

Si j'écris quelque chose de la sorte:

builder==
function <T> test(a : T) : T {
return a;
}
==

J'obtiens une erreur de parsing : image

De même si j'essaye de mettre de l'html dans un champs string d'un composant :

radioGroup.items[0].content = "<img src='test'/>"

Un texte s'affiche sans être interprété...

Dis moi si besoin de plus de détails !

Ofghanirre commented 1 year ago

Hello ! Plus d'infos sur le problème:

J'ai pu observer que le problème est globalement présent sur la plateforme et l'éditeur: image Ici j'ai eu le malheur d'utiliser une balise soulignée en dessous d'un mot et cela a ajouté des balises (qui d'ailleurs semblent mal placée, j'avais mis le mot "extends" en souligné... je me retrouve avec une balise en fin de ligne...

Voici l'output au format texte au besoin: { "time": 1687340354051, "blocks": [ { "id": "2vWKqby78O", "type": "header", "data": { "text": "Documentation Wrapper RadioGroupComponent", "level": 2 }, "tunes": { "textVariant": "", "textAlignment": { "alignment": "left" } } }, { "id": "_13nHJcg3b", "type": "paragraph", "data": { "text": "Réalisée par Antonin JEAN" }, "tunes": { "textVariant": "", "textAlignment": { "alignment": "left" } } }, { "id": "xayMfqh1T5", "type": "delimiter", "data": {} }, { "id": "TxUTT3dxQx", "type": "paragraph", "data": { "text": "Ce modèle d'exercice peut être utilisé comme base pour la création d'un exercice implémentant un questionnaire à choix unique à partir du composant RadioGroup" }, "tunes": { "textVariant": "", "textAlignment": { "alignment": "left" } } }, { "id": "pvR-yX_UmZ", "type": "paragraph", "data": { "text": "Manuel Utilisateur:" }, "tunes": { "textVariant": "", "textAlignment": { "alignment": "left" } } }, { "id": "3n7jiPwvyw", "type": "paragraph", "data": { "text": "Pour utiliser ce modèle vous devez :" }, "tunes": { "textVariant": "", "textAlignment": { "alignment": "left" } } }, { "id": "7khl9psS8v", "type": "list", "data": { "style": "unordered", "items": [ { "content": "l'importer et l'étendre avec le mot clé extends dans votre exercice", "items": [] }, { "content": "remplir la variable good avec un ensemble de bonnes réponses", "items": [ { "content": "Une par ligne", "items": [] }, { "content": "Une seule sera sélectionnée aléatoirement", "items": [] } ] }, { "content": "remplir la variable bad avec un ensemble de mauvaises réponse<u class="cdx-underline">", "items": [] } ] } }, { "id": "FE9A85KZnz", "type": "paragraph", "data": { "text": "Test" }, "tunes": { "textVariant": "", "textAlignment": { "alignment": "left" } } } ], "version": "2.26.5" }

En esperant que ça puisse aider à la résolution du problème

mciissee commented 1 year ago

@Ofghanirre Merci pour l'issue, c'est désormais corrigé !

Il y avait un problème au niveau du chargement de l'état d'un webcomposant avec l'attribut state quand elle contenant certains caractères comme '.

La solution technique implémentée consiste à encoder le state sur le back et le decoder sur le frontend en bonus cela permet d'introduire une nouvelle feature permettant de cacher le JSON d'un composant aux élèves et pouvoir introduire d'autres types de composants qu'on ne pouvait pas avant (geogebra par exemple) à cause de cette limitation.

L'encodage n'est pas safe à 100%, les élèves peuvent jouer avec l'inspecteur du navigateur pour décoder la valeur s'il savent le faire.

J'ai aussi implémentée une solution de fallback en commentaire dans le code du player renderer.

Pour le problème concernant le caractère '<' dans le builder, c'est normal, il doit être écrit en JS et non TS donc tu ne peux pas utiliser de typage sur les sandbox js.

Ofghanirre commented 1 year ago

Superbe merci beaucoup ! Je vais pouvoir dormir tranquille maintenant 👍 🤣