laowantong / mocodo

Modélisation Conceptuelle de Données. Nickel. Ni souris.

Home Page:https://www.mocodo.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

laowantong opened this issue · comments

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 :

mcd_uid = ''.join(random.choice(ID_CHARACTERS) for _ in range(8))

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.