{# templates/scormia/public_preview.html.twig Page publique d'un module Scormia partagé par lien. Lecture seule. Le JSON du module provient de PublicModuleProjector : ni uuid, ni version, ni bibliothèque d'images source. themeCss provient de ScormiaThemes::buildCss(), qui revalide l'accent (repli strict sur la valeur par défaut) avant de l'injecter dans ce {{ encore_entry_link_tags('scormia_player') }} {# Signature Bubul — feuille autonome, jamais fondue dans player.css : ce dernier est embarqué dans les ZIP SCORM exportés, où la signature n'existe pas (elle n'est rendue que par CE gabarit). #} {{ encore_entry_link_tags('public_share_signature') }} {# `sc-share-public` : porte les surcharges de mise en page qui font place à la bande de signature (cf. public_share_signature.css). Posée sur le seul gabarit public — l'aperçu authentifié et le paquet exporté, qui partagent player.css, gardent leur mise en page inchangée. #}
{# Bloc de données non exécutable (type application/json) : hors du champ de script-src, donc aucun 'unsafe-inline' n'est nécessaire pour la CSP. JSON_INVALID_UTF8_SUBSTITUTE : même motif qu'en Serenia (cf. templates/seren_ia/public_show.html.twig) — sans lui, un seul bloc du module portant une séquence UTF-8 invalide fait renvoyer FALSE à json_encode() pour la TOTALITÉ de moduleJson, vidant le bloc entier. Le player se retrouverait sans aucun contenu, sans erreur serveur. #} {# data-download-url n'est posé QUE si le propriétaire a autorisé le téléchargement (cf. PublicModuleProjector::project() → ScormiaPublicController::preview()) : sans autorisation, la page ne porte ni bouton ni chemin, l'existence de /telecharger ne se devine donc pas. Le player lit cet attribut et n'ajoute son bouton que s'il est présent — c'est aussi ce qui garantit qu'un module EXPORTÉ en SCORM, dont la page hôte ne pose jamais cet attribut, n'affiche jamais ce bouton hors ligne. L'autorisation réelle reste relue à chaque requête par download(). #} {# Signature Bubul — bande en flux SOUS le player, pas un badge flottant. Les deux barres du player sont occupées : celle du haut (sommaire, titre, progression, téléchargement) est construite par player.js, donc partagée avec les paquets SCORM exportés ; celle du bas (« Précédent / compteur / Suivant ») n'est PAS épinglée à la fenêtre — elle suit le contenu dans le défilement de `.sc-player__main`, et vient donc se placer au bas de l'écran en fin de contenu. Un badge en position fixe finirait dessus. Frère de `#scormia-player`, jamais enfant : startPlayer() fait un `mountPoint.append(root)` sans vider le point de montage, mais y déposer la signature la placerait AVANT le player dans le flux. #}