É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 :
Line 21 in d599daf
Celui-ci est ensuite suffixé à la classe de chaque élément du SVG correspondant.
Il y a deux problèmes.
- 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.
- 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) :
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.