{# Branchement de la modale de nouveauté sur l'utilisateur courant. Inclus sans condition depuis base.html.twig, comme le bandeau cookies : c'est active_announcement() qui décide s'il y a quelque chose à afficher (utilisateur connecté, annonce publiée, dans sa fenêtre, pas encore vue par lui). #} {% set announcement = active_announcement() %} {% if announcement %} {# safeCtaUrl écarte les schémas non admis (javascript:, data:…). Une adresse refusée emporte le bouton avec elle : mieux vaut ne rien proposer qu'un bouton qui ne mène nulle part. #} {% set ctaUrl = announcement.safeCtaUrl %} {# data-turbo-temporary : Turbo réaffiche l'instantané mis en cache avant la réponse du serveur. Sans cet attribut, la modale y survit et le connect() du contrôleur la rouvre au retour sur la page — alors même que le serveur ne la rend plus, la lecture ayant été enregistrée. #} {% include '_organisms/announcement-modal/announcement-modal.html.twig' with { badge: announcement.badge, title: announcement.title, body: announcement.body, bullets: announcement.bullets, imagePath: announcement.imagePath, imageAlt: announcement.imageAlt, ctaLabel: ctaUrl ? announcement.ctaLabel : null, ctaUrl: ctaUrl, modalAttr: { 'data-controller': 'shared--announcement', 'data-turbo-temporary': '', 'data-shared--announcement-url-value': path('app_announcement_seen', {id: announcement.id}), 'data-shared--announcement-token-value': csrf_token('announcement-seen-' ~ announcement.id), 'data-action': 'keydown.esc@window->shared--announcement#close' }, closeAttr: { 'data-action': 'click->shared--announcement#close' }, ctaAttr: { 'data-action': 'click->shared--announcement#close' } } only %} {% endif %}