@bebranded/bb-contents 1.0.35-beta → 1.0.37-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bb-contents.js +61 -31
  2. package/package.json +1 -1
package/bb-contents.js CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  // Configuration
19
19
  const config = {
20
- version: '1.0.35-beta',
20
+ version: '1.0.37-beta',
21
21
  debug: true, // Activé temporairement pour debug
22
22
  prefix: 'bb-', // utilisé pour générer les sélecteurs (data-bb-*)
23
23
  i18n: {
@@ -466,43 +466,53 @@
466
466
  // Marquer l'élément comme traité par le module marquee
467
467
  element.setAttribute('data-bb-marquee-processed', 'true');
468
468
 
469
- // Fonction pour initialiser l'animation avec retry amélioré
469
+ // Fonction pour initialiser l'animation avec vérification robuste des dimensions
470
470
  const initAnimation = (retryCount = 0) => {
471
- // Attendre que le contenu soit dans le DOM
471
+ // Vérifier que les images sont chargées
472
+ const images = mainBlock.querySelectorAll('img');
473
+ const imagesLoaded = Array.from(images).every(img => img.complete && img.naturalHeight > 0);
474
+
475
+ // Attendre que le contenu soit dans le DOM et que les images soient chargées
472
476
  requestAnimationFrame(() => {
473
- const contentWidth = mainBlock.offsetWidth;
474
- const contentHeight = mainBlock.offsetHeight;
477
+ // Calcul plus robuste des dimensions
478
+ const rect = mainBlock.getBoundingClientRect();
479
+ const contentWidth = rect.width || mainBlock.offsetWidth;
480
+ const contentHeight = rect.height || mainBlock.offsetHeight;
475
481
 
476
- // Debug amélioré
477
- bbContents.utils.log('Debug - Largeur du contenu:', contentWidth, 'px', 'Hauteur:', contentHeight, 'px', 'Enfants:', mainBlock.children.length, 'Vertical:', isVertical, 'Direction:', direction, 'Tentative:', retryCount + 1);
482
+ // Pour les marquees verticaux, utiliser la largeur du parent si nécessaire
483
+ let finalWidth = contentWidth;
484
+ let finalHeight = contentHeight;
478
485
 
479
- // Si pas de contenu, réessayer avec délai progressif
480
- if ((isVertical && contentHeight === 0) || (!isVertical && contentWidth === 0)) {
481
- if (retryCount < 5) {
482
- bbContents.utils.log('Contenu non prêt, nouvelle tentative dans', (200 + retryCount * 100), 'ms');
483
- setTimeout(() => initAnimation(retryCount + 1), 200 + retryCount * 100);
484
- return;
485
- } else {
486
- bbContents.utils.log('Échec d\'initialisation après 5 tentatives');
487
- return;
488
- }
486
+ if (isVertical && contentWidth < 10) {
487
+ // Si largeur trop petite, utiliser la largeur du parent
488
+ const parentRect = mainBlock.parentElement.getBoundingClientRect();
489
+ finalWidth = parentRect.width || mainBlock.parentElement.offsetWidth;
490
+ bbContents.utils.log('Largeur corrigée pour marquee vertical:', finalWidth, 'px (était:', contentWidth, 'px)');
489
491
  }
490
492
 
491
- // Pour le vertical, s'assurer qu'on a une hauteur minimale
492
- if (isVertical && contentHeight < 50) {
493
- if (retryCount < 5) {
494
- bbContents.utils.log('Hauteur insuffisante pour le marquee vertical (' + contentHeight + 'px), nouvelle tentative dans', (200 + retryCount * 100), 'ms');
495
- setTimeout(() => initAnimation(retryCount + 1), 200 + retryCount * 100);
493
+ // Debug amélioré avec statut des images
494
+ bbContents.utils.log('Debug - Largeur:', finalWidth, 'px, Hauteur:', finalHeight, 'px, Images chargées:', imagesLoaded, 'Enfants:', mainBlock.children.length, 'Vertical:', isVertical, 'Direction:', direction, 'Tentative:', retryCount + 1);
495
+
496
+ // Vérifications robustes avant initialisation
497
+ const hasValidDimensions = (isVertical && finalHeight > 50) || (!isVertical && finalWidth > 50);
498
+ const maxRetries = 8; // Plus de tentatives pour attendre les images
499
+
500
+ // Si pas de contenu valide ou images pas chargées, réessayer
501
+ if (!hasValidDimensions || !imagesLoaded) {
502
+ if (retryCount < maxRetries) {
503
+ const delay = 300 + retryCount * 200; // Délais plus longs pour attendre les images
504
+ bbContents.utils.log('Contenu/images non prêts, nouvelle tentative dans', delay, 'ms');
505
+ setTimeout(() => initAnimation(retryCount + 1), delay);
496
506
  return;
497
507
  } else {
498
- bbContents.utils.log('Échec d\'initialisation - hauteur insuffisante après 5 tentatives');
508
+ bbContents.utils.log('Échec d\'initialisation après', maxRetries, 'tentatives - dimensions:', finalWidth + 'x' + finalHeight, 'images chargées:', imagesLoaded);
499
509
  return;
500
510
  }
501
511
  }
502
512
 
503
513
  if (isVertical) {
504
514
  // Animation JavaScript pour le vertical
505
- const contentSize = contentHeight;
515
+ const contentSize = finalHeight;
506
516
  const totalSize = contentSize * 4 + parseInt(gap) * 3; // 4 copies au lieu de 3
507
517
 
508
518
  // Ajuster la hauteur du scrollContainer seulement si pas en mode auto
@@ -550,7 +560,7 @@
550
560
  }
551
561
  } else {
552
562
  // Animation JavaScript pour l'horizontal (comme le vertical pour éviter les saccades)
553
- const contentSize = contentWidth;
563
+ const contentSize = finalWidth;
554
564
  const totalSize = contentSize * 4 + parseInt(gap) * 3;
555
565
  scrollContainer.style.width = totalSize + 'px';
556
566
 
@@ -596,12 +606,22 @@
596
606
  });
597
607
  };
598
608
 
599
- // Démarrer l'initialisation avec délai adaptatif
600
- let initDelay = isVertical ? 300 : 100;
609
+ // Démarrer l'initialisation avec délai adaptatif - Option 1: Attendre que tout soit prêt
610
+ let initDelay = isVertical ? 500 : 200; // Délais plus longs par défaut
601
611
  if (bbContents._performanceBoostDetected) {
602
- initDelay = isVertical ? 600 : 300; // Délais plus longs avec bb-performance-boost
612
+ initDelay = isVertical ? 800 : 500; // Délais encore plus longs avec bb-performance-boost
613
+ }
614
+
615
+ // Attendre window.load si pas encore déclenché
616
+ if (document.readyState !== 'complete') {
617
+ bbContents.utils.log('Attente de window.load pour initialiser le marquee');
618
+ window.addEventListener('load', () => {
619
+ setTimeout(() => initAnimation(0), initDelay);
620
+ });
621
+ } else {
622
+ // window.load déjà déclenché, initialiser directement
623
+ setTimeout(() => initAnimation(0), initDelay);
603
624
  }
604
- setTimeout(() => initAnimation(0), initDelay);
605
625
  });
606
626
 
607
627
  bbContents.utils.log('Module Marquee initialisé:', elements.length, 'éléments');
@@ -1007,9 +1027,9 @@
1007
1027
  }, delay);
1008
1028
  }
1009
1029
 
1010
- // Initialisation différée supplémentaire pour les cas difficiles
1030
+ // Initialisation différée supplémentaire pour les cas difficiles - Option 1: Attendre que tout soit vraiment prêt
1011
1031
  window.addEventListener('load', function() {
1012
- const loadDelay = document.body.hasAttribute('bb-performance-boost') ? 2000 : 1000;
1032
+ const loadDelay = document.body.hasAttribute('bb-performance-boost') ? 3000 : 1500; // Délais plus longs
1013
1033
  setTimeout(function() {
1014
1034
  // Vérifier s'il y a des éléments non initialisés
1015
1035
  const unprocessedMarquees = document.querySelectorAll('[bb-marquee]:not([data-bb-marquee-processed])');
@@ -1017,6 +1037,16 @@
1017
1037
  bbContents.utils.log('Éléments marquee non initialisés détectés après load, réinitialisation...');
1018
1038
  bbContents.reinit();
1019
1039
  }
1040
+
1041
+ // Vérification supplémentaire des images chargées
1042
+ const allImages = document.querySelectorAll('img');
1043
+ const unloadedImages = Array.from(allImages).filter(img => !img.complete || img.naturalHeight === 0);
1044
+ if (unloadedImages.length > 0) {
1045
+ bbContents.utils.log('Images non chargées détectées:', unloadedImages.length, '- attente supplémentaire...');
1046
+ setTimeout(() => {
1047
+ bbContents.reinit();
1048
+ }, 1000);
1049
+ }
1020
1050
  }, loadDelay);
1021
1051
  });
1022
1052
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bebranded/bb-contents",
3
- "version": "1.0.35-beta",
3
+ "version": "1.0.37-beta",
4
4
  "description": "Contenus additionnels français pour Webflow",
5
5
  "main": "bb-contents.js",
6
6
  "scripts": {