remove autostart and replace by start on click to avoid a important initial load

This commit is contained in:
2026-02-12 22:23:08 +01:00
parent e4baa929f2
commit 454e4c150d

View File

@@ -59,11 +59,10 @@ def inject_common_assets(m):
if (video.src.includes(newSrc)) return;
var savedTime = video.currentTime;
var wasPlaying = !video.paused; // On regarde si c'était en lecture
var wasPlaying = !video.paused;
video.src = newSrc;
// On attend que les métadonnées soient prêtes pour remettre le temps
video.onloadedmetadata = function() {
this.currentTime = savedTime;
if (wasPlaying) {
@@ -77,7 +76,6 @@ def inject_common_assets(m):
video.load();
// Mise à jour visuelle des boutons
var container = btnElement.parentElement;
var buttons = container.getElementsByClassName('quality-btn');
for (var i = 0; i < buttons.length; i++) {
@@ -92,6 +90,34 @@ def inject_common_assets(m):
btnElement.classList.add('active-1080');
}
}
// --- AUTOPLAY INTELLIGENT (DÉTECTION D'OUVERTURE POPUP) ---
// Cet observateur surveille l'apparition des popups.
// Dès qu'une popup s'ouvre, il trouve la vidéo et lance la lecture.
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
mutation.addedNodes.forEach(function(node) {
// Si l'élément ajouté est une popup Leaflet
if (node.nodeType === 1 && node.classList && node.classList.contains('leaflet-popup')) {
var video = node.querySelector('video');
if (video) {
console.log("🎬 Popup ouverte : Lancement de la vidéo...");
var playPromise = video.play();
if (playPromise !== undefined) {
playPromise.catch(error => {
console.log("Autoplay bloqué par le navigateur (interaction requise ?)", error);
});
}
}
}
});
});
});
// On lance l'espion dès que la page est chargée
document.addEventListener("DOMContentLoaded", function() {
observer.observe(document.body, { childList: true, subtree: true });
});
// ----------------------------------------
function toggleJournal(open) {
@@ -270,23 +296,27 @@ for i, jour in enumerate(tous_les_jours):
# Ajout 'autoplay muted' pour le lancement au clic
# Ajout 'preload=none' pour ne pas charger les autres
# --- BLOC VIDÉO FIABLE (Défaut = Léger, Upgrade manuel) ---
v_pop = (
f'<div style="width:calc(85vw - 40px); max-width:1000px; text-align:center;">'
f'<div class="header-row">'
f'<span class="file-name" title="{v_name.strip()}">{v_name.strip()}</span>'
f'<div class="quality-controls">'
# Le bouton 720p est actif par défaut (cohérent avec le fichier chargé)
f'<span class="quality-btn active-720" onclick="changeQuality(\'{video_id}\', \'{mobile_file}\', this)">720p</span>'
f'<span class="quality-btn" onclick="changeQuality(\'{video_id}\', \'{desktop_file}\', this)">1080p</span>'
f'</div>'
f'</div>'
# 1. On charge par défaut le fichier MOBILE (léger) pour garantir la lecture partout.
# 2. preload="none" : Indispensable pour que la page charge vite.
# 3. Pas d'autoplay.
f'<video id="{video_id}" style="width:100%; max-height:70vh; border-radius:8px; background:black;" '
f'controls playsinline webkit-playsinline autoplay muted preload="none" '
f'src="{mobile_file}">'
f'controls playsinline webkit-playsinline preload="none" '
f'src="{mobile_file}">' # <-- On pointe directement sur le fichier léger
f'</video></div>'
)
folium.Marker(location=pts_v[0], popup=folium.Popup(v_pop, max_width="100%"), icon=create_pin("#007AFF", "play")).add_to(marker_cluster)
if day_coords: m_day.fit_bounds(day_coords, padding=(50, 50))