Corrige la modale "Utiliser un modèle" : aucune sélection par défaut, aperçu plein espace, navigation entre pages

Trois retours distincts :
- Plus de présélection du thème déjà appliqué à l'ouverture — un choix
  toujours explicite de l'utilisateur.
- L'état vide (.docTemplatePreviewEmpty) restait visible EN MÊME TEMPS
  que l'iframe une fois un thème sélectionné : `display:flex` posé
  directement dessus battait le `display:none` natif de [hidden]
  (même bug déjà rencontré pour .docSidebarTabPanel[hidden] plus tôt
  dans le projet) — les deux se partageaient flex:1, coupant l'aperçu
  en deux au lieu de lui laisser tout l'espace.
- L'aperçu ne montrait que la première page du modèle sans aucun moyen
  d'en voir les autres : la route /document/<slug>/theme/<id>/preview
  rend désormais TOUTES les pages, une barre Précédent/Suivant
  (entièrement côté client, aucun aller-retour serveur supplémentaire)
  permet de naviguer entre elles.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
william
2026-09-24 09:58:31 +02:00
co-authored by Claude Sonnet 5
parent bd8f1d4b1e
commit 7730b3688f
5 changed files with 131 additions and 23 deletions
+85 -4
View File
@@ -12,18 +12,99 @@
<style>
html, body {
margin: 0;
padding: 16px;
padding: 0;
height: 100%;
background: #efece4;
display: flex;
flex-direction: column;
overflow: hidden;
}
.previewPages {
flex: 1;
min-height: 0;
display: flex;
align-items: center;
justify-content: center;
padding: 16px;
overflow: auto;
}
.previewPages .docPage[hidden] {
display: none;
}
.previewNav {
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
gap: 14px;
padding: 10px;
background: #1a1b20;
color: #fff;
font: 600 13px -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}
.previewNav button {
border: none;
background: #2a2c33;
color: #fff;
border-radius: 6px;
padding: 6px 12px;
cursor: pointer;
font: inherit;
}
.previewNav button:disabled {
opacity: 0.4;
cursor: default;
}
</style>
</head>
<body>
<div class="docPage">
<div class="docPageContent">
{{ rendered_page | safe }}
<div class="previewPages">
{% for rendered_page in rendered_pages %}
<div class="docPage" data-page-index="{{ loop.index0 }}" {% if not loop.first %}hidden{% endif %}>
<div class="docPageContent">
{{ rendered_page | safe }}
</div>
</div>
{% endfor %}
</div>
{% if rendered_pages|length > 1 %}
<div class="previewNav">
<button type="button" id="previewPrevBtn">‹ Précédent</button>
<span id="previewPageLabel"></span>
<button type="button" id="previewNextBtn">Suivant ›</button>
</div>
{% endif %}
<script>
(function previewPageNav() {
var pages = Array.prototype.slice.call(document.querySelectorAll('.previewPages .docPage'));
if (pages.length <= 1) return;
var current = 0;
var prevBtn = document.getElementById('previewPrevBtn');
var nextBtn = document.getElementById('previewNextBtn');
var label = document.getElementById('previewPageLabel');
function render() {
pages.forEach(function pageAt(page, index) {
page.hidden = index !== current;
});
label.textContent = 'Page ' + (current + 1) + ' / ' + pages.length;
prevBtn.disabled = current === 0;
nextBtn.disabled = current === pages.length - 1;
}
prevBtn.addEventListener('click', function goPrev() {
if (current > 0) { current -= 1; render(); }
});
nextBtn.addEventListener('click', function goNext() {
if (current < pages.length - 1) { current += 1; render(); }
});
render();
}());
</script>
</body>
</html>