ScenariBuilder - créer des balises dont la représentation dépend d'une variable topaze

Hello world !

Pour les besoins d’un projet, je cherche à créer un nouveau .model dans Topaze.

Il s’agirait d’items correspondants à des personnages, dont le prénom et l’image affichés dépendraient d’une variable de parcours Topaze. L’objectif est de pouvoir représenter au mieux des dialogues entre personnages - imaginer une conversation chat, avec des bulles et avatars - sans avoir besoin de truquer des balises pb.


Pour illustrer mon propos, voici un exemple :

Imaginons 5 types de personnages : moi, une informaticienne, un documentaliste, une chef de projet, une designer et une juriste.
En fonction du parcours choisi (trois parcours différents), l’informaticienne pourrait s’appeler Léa, Marie ou Jeanne.

Côté auteur

  • Dans un .node, j’ajoute un message qui correspond au type de personnage *moi,
  • J’ajoute ensuite d’autre message correspondant à la catégorie chef de projet,
  • etc…

Côté utilisateur

Les prénoms et images dépendent du parcours choisi (d’une variable donc). Idée du rendu (merci à Nicolas Cage pour les avatars) :


Côté builder

J’imagine un .model comme ça (copié des pb) :

<sm:compositionPrim xmlns:sc="http://www.utc.fr/ics/scenari/v3/core" xmlns:sm="http://www.utc.fr/ics/scenari/v3/modeling" name="Personnages">
  <sm:identification targetNamespace="utc.fr:ics/opale3" targetPrefix="op" code="pb" itemExtension="xml"/>
  <sm:structure>
    <sm:set usage="required">
      <sm:part code="p1" name=";Personnage n°1" family="content" internalized="always">
        <sm:meta sc:refUri="/academic/model/Personnages/personnageMeta.model" usage="required"/>
        <sm:allowedModel sc:refUri="/academic/model/Re/res.model"/>
      </sm:part>
      <sm:part code="p2" name=";Personnage n°2" family="content" internalized="always">
        <sm:meta sc:refUri="/academic/model/Personnages/personnageMeta.model" usage="required"/>
        <sm:allowedModel sc:refUri="/academic/model/Re/res.model"/>
      </sm:part>
     ...

Avec un .transf similaire à celui des pb :

Mon problème

Je ne vois pas comment récupérer l’état d’une variable à ce niveau pour afficher le bon prénom / avatar.
Je me dis que dans un uiwidget, avec un choose, et une condition (free certainement), ce serait possible (mais le free sort de mes compétences).

Ou bien, si c’est impossible de récupérer la variable à ce moment là (je comprendrai bien), je pourrais passer par un .js qui lit l’état de la variable topaze au runtime, et modifie les classes des balises de personnages génériques pour leur affecter un style CSS en fonction.

Qu’en pensez-vous ? Est-ce au moins faisable ?

Merci d’avance pour toute aide !

1 « J'aime »

Bonjour Maen,
je n’ai hélas pas la réponse à tes questions mais je suis intéressée par le résultat :wink:
Tu nous montreras ça aux 20 ans de Scenari l’année prochaine?
A +
Katia

Hello Katia !

Merci pour ta réponse ! Tu vois donc pas de possibilité de récupérer l’état d’une variable topaze, même en javascript dans le navigateur ?

Déjà 20 ans !? Je viendrai oui :slight_smile:

Je m’y suis remis ce matin, et j’ai créé un .model qui accepte dans ses champs meta des variables (calculées ou non) :

Mes variables renvoient des chaines de caractères, qui s’affichent bien dans les éléments textes, mais pas dans mes métas :frowning:

J’ai pourtant utilisé txt.model dans mes champs meta, qui utilise autoVar et userVar. Je suspecte qu’il y a une XSL quelque part que je n’ai pas activé pour mes nouveaux .transf. Je continue à creuser, j’y suis presque :wink:

J’ai réussi à récupérer les variables des metadatas et à les afficher :slight_smile:

  • Mes types utilisés dans mon modèle méta n’étaient pas bon, j’ai switché pour un sm:field avec otherType, et j’ai dupliqué txt.model et son transf en ne gardant que ce qui m’intéressait (texte + variables display + indicateur display)
  • Dans mon .transf principal, j’ai utilisé des callPartMeta avec des axis pour chaque propriété meta (image, prénom), qui elles même appellent les transf correspondants
  • J’ai fait un .uiwidget pour chaque bulle (gauche, droite), dans lequel je construit mon html
  • J’ai une variable par type de personnage et par meta (image, prénom), qui en fonction du parcours, renverra une valeur différent
    • Pour les images, j’ai été obligé de truquer ; le JS de Topaze affiche la valeur actuelle de la variable via un document.write(), du coup j’ai fait en sorte que ma variable renvoie du html

En plus, il faut que les images soient affichées quelque part dans la chaine, sinon elles ne sont pas exportées comme ressources. C’est pas fou fou, mais vu le fonctionnement de l’interpolation des variables Topaze, j’ai pas trouvé mieux.

Si quelqu’un a des suggestions pour faire mieux, je suis preneur.

Et si quelqu’un est intéressé par ce modèle, ou le code qui a servi a le faire, faites moi signe !

Bonjour !

Ma cliente est ok pour partager le modèle en licence libre, mais après la fin du projet et la diffusion de ses ressources.

Je reviendrai poster sur ce forum les liens vers le code source dès que ce sera fait.

Pour info, ma cliente est sur Topaze 1.4.017, j’ai donc dérivé mon modèle à cette version - ce ne doit pas être trop compliqué d’adapter pour la 1.5.

A bientôt !

Re @anon1125976 @oliverka !

Ça y est, on a publié les ressources :slight_smile: : https://ledroitdesavoir.imt-atlantique.fr/

Les liens vers les Github sont en bas de page, dont le modèle Topaze en question. Si vous avez des questions sur son usage, hésitez pas à créer un nouveau fil de discussion en me taguant !

1 « J'aime »