feat(vues): bouton « Copier le lien » + lien de partage en texte stylé (#112)

- Bouton de copie explicite (icône copy.svg + « Copier le lien » + retour
  « ✓ Copié ») sur /tableau et /compte/vues, via dcc.Clipboard (children /
  copied_children), à la place de l'icône seule.
- Le lien direct s'affiche en texte (span#share-url-text) plutôt qu'un
  <input> : évite la troncature d'affichage du champ Bootstrap form-control en
  flex (zone de texte bloquée ~218px), montre tout le lien avec retour à la
  ligne, et prend la largeur du lien. Stylé comme un champ (bordure, coins
  arrondis, texte 90%).
- Instructions /compte/vues simplifiées ; E2E adapté (#share-url-text).
This commit is contained in:
Colin Maudry
2026-07-13 22:08:00 +02:00
parent 770b7cbdf8
commit e0828a7e13
5 changed files with 68 additions and 22 deletions
+8 -6
View File
@@ -168,16 +168,18 @@ def test_open_shared_view_applies_and_shows_box(dash_duo, users_db_path):
dash_duo.wait_for_text_to_equal(".logo > h1", "colibre", timeout=6)
dash_duo.wait_for_page(dash_duo.server_url + f"/tableau?vue=ma-vue_{token}")
# Le bloc de partage est visible et contient l'URL courte (jeton). La valeur
# de l'input est renseignée par le même callback que l'affichage : la lire
# non vide prouve que l'écho de l'application n'a PAS masqué le bloc.
# Le bloc de partage est visible et affiche l'URL courte (jeton). Le texte est
# renseigné par le même callback que l'affichage : le lire non vide prouve que
# l'écho de l'application n'a PAS masqué le bloc.
dash_duo.wait_for_style_to_equal("#share-url-box", "display", "flex", timeout=10)
dash_duo.wait_for_element("#share-url-input", timeout=6)
dash_duo.wait_for_element("#share-url-text", timeout=6)
WebDriverWait(dash_duo.driver, 10).until(
lambda _d: token
in (dash_duo.find_element("#share-url-input").get_attribute("value") or "")
lambda _d: token in (dash_duo.find_element("#share-url-text").text or "")
)
# Le bouton de copie porte un libellé explicite (UX : pas d'icône seule).
assert "Copier le lien" in dash_duo.find_element("#share-url-box").text
# Une action utilisateur (filtre) masque la box. On re-tente la saisie tant
# que le bloc n'est pas masqué : la fenêtre de re-render post-application
# peut invalider l'input entre le find et le send_keys.