laowantong / mocodo

Modélisation Conceptuelle de Données. Nickel. Ni souris.
https://www.mocodo.net
MIT License
181 stars 51 forks source link

Éviter que l'interaction avec un SVG ne s'applique à d'autres SVG de la même page #72

Closed laowantong closed 1 year ago

laowantong commented 1 year ago

Lorsque plusieurs SVG interactifs se trouvent sur la même page web (p. ex. dans un notebook), il est important de distinguer leurs éléments dans le DOM de façon à éviter que les interactions sur l'un soient en fait appliquées à un autre. La solution actuelle consiste à générer pour chaque MCD un identifiant aléatoire de 8 chiffres et lettres ASCII :

https://github.com/laowantong/mocodo/blob/d599dafeeb3c9957e00deeeb89f11886d1619d63/mocodo/mcd_to_svg.py#L21

Celui-ci est ensuite suffixé à la classe de chaque élément du SVG correspondant.

Il y a deux problèmes.

  1. Tout d'abord, depuis une époque indéterminée, ça ne marche pas ! En effet, les fonctions Javascript elles-mêmes doivent avoir un identificateur unique.
  2. D'autre part, du fait du caractère aléatoire de l'identifiant généré, sous contrôle de versions, chaque régénération d'un SVG créera autant de changements que d'éléments (ci-dessous, la fin et le début de deux SVG consécutifs) :

image

La solution retenue consist à calculer le mcd_uid à partir d'une empreinte MD5 de son texte-source. Pour que deux MCD identiques puissent encore coexister sans problème sur la même page, suffixer l'empreinte par un entier non négatif --uid_suffix.

Au passage, on peut également supprimer toute mention de ce mcd_uid dans les SVG non interactifs.