@bebranded/bb-contents 1.0.19-beta → 1.0.21-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 +35 -10
  2. package/package.json +1 -1
package/bb-contents.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * BeBranded Contents
3
3
  * Contenus additionnels français pour Webflow
4
- * @version 1.0.19-beta
4
+ * @version 1.0.21-beta
5
5
  * @author BeBranded
6
6
  * @license MIT
7
7
  * @website https://www.bebranded.xyz
@@ -17,7 +17,7 @@
17
17
 
18
18
  // Configuration
19
19
  const config = {
20
- version: '1.0.19-beta',
20
+ version: '1.0.21-beta',
21
21
  debug: window.location.hostname === 'localhost' || window.location.hostname.includes('webflow.io'),
22
22
  prefix: 'bb-', // utilisé pour générer les sélecteurs (data-bb-*)
23
23
  i18n: {
@@ -317,11 +317,15 @@
317
317
  bbContents.utils.log('Module détecté: marquee');
318
318
 
319
319
  elements.forEach(element => {
320
- if (element.bbProcessed) return;
320
+ // Vérifier si l'élément a déjà été traité par un autre module
321
+ if (element.bbProcessed || element.hasAttribute('data-bb-youtube-processed')) {
322
+ bbContents.utils.log('Élément marquee déjà traité par un autre module, ignoré:', element);
323
+ return;
324
+ }
321
325
  element.bbProcessed = true;
322
326
 
323
327
  // Récupérer les options
324
- const speed = bbContents._getAttr(element, 'bb-marquee-speed') || '100';
328
+ const speed = bbContents._getAttr(element, 'bb-marquee-speed') || '3000';
325
329
  const direction = bbContents._getAttr(element, 'bb-marquee-direction') || 'left';
326
330
  const pause = bbContents._getAttr(element, 'bb-marquee-pause') || 'true';
327
331
  const gap = bbContents._getAttr(element, 'bb-marquee-gap') || '50';
@@ -357,9 +361,14 @@
357
361
 
358
362
  // Assembler
359
363
  mainContainer.appendChild(scrollContainer);
364
+ // Sauvegarder le contenu original avant de vider
365
+ const originalMarqueeContent = element.innerHTML;
360
366
  element.innerHTML = '';
361
367
  element.appendChild(mainContainer);
362
368
 
369
+ // Marquer l'élément comme traité par le module marquee
370
+ element.setAttribute('data-bb-marquee-processed', 'true');
371
+
363
372
  // Animation JavaScript simple et efficace
364
373
  const isVertical = orientation === 'vertical';
365
374
  let animationId;
@@ -370,14 +379,17 @@
370
379
  if (!startTime) startTime = timestamp;
371
380
  const elapsed = timestamp - startTime;
372
381
 
373
- // Vitesse en millisecondes
382
+ // Vitesse en millisecondes (plus lente pour une transition fluide)
374
383
  const speedMs = parseInt(speed);
375
384
  const progress = (elapsed % speedMs) / speedMs;
376
385
 
377
- // Calculer la taille du contenu
386
+ // Calculer la taille du contenu avec une transition plus douce
378
387
  const contentSize = isVertical ? scrollContainer.scrollHeight / 2 : scrollContainer.scrollWidth / 2;
379
388
  currentPosition = -progress * contentSize;
380
389
 
390
+ // Appliquer une transition CSS pour plus de fluidité
391
+ scrollContainer.style.transition = 'transform 0.1s ease-out';
392
+
381
393
  // Appliquer la transformation
382
394
  scrollContainer.style.transform = isVertical
383
395
  ? `translateY(${currentPosition}px)`
@@ -386,10 +398,10 @@
386
398
  animationId = requestAnimationFrame(animate);
387
399
  };
388
400
 
389
- // Démarrer l'animation
401
+ // Démarrer l'animation avec un délai pour laisser le DOM se stabiliser
390
402
  setTimeout(() => {
391
403
  animationId = requestAnimationFrame(animate);
392
- }, 100);
404
+ }, 200);
393
405
 
394
406
  // Pause au survol
395
407
  if (pause === 'true') {
@@ -437,7 +449,11 @@
437
449
  bbContents.utils.log('Module détecté: youtube');
438
450
 
439
451
  elements.forEach(element => {
440
- if (element.bbProcessed) return;
452
+ // Vérifier si l'élément a déjà été traité par un autre module
453
+ if (element.bbProcessed || element.hasAttribute('data-bb-marquee-processed')) {
454
+ bbContents.utils.log('Élément youtube déjà traité par un autre module, ignoré:', element);
455
+ return;
456
+ }
441
457
  element.bbProcessed = true;
442
458
 
443
459
  const channelId = bbContents._getAttr(element, 'bb-youtube-channel');
@@ -478,6 +494,9 @@
478
494
  // Cacher le template original
479
495
  template.style.display = 'none';
480
496
 
497
+ // Marquer l'élément comme traité par le module YouTube
498
+ element.setAttribute('data-bb-youtube-processed', 'true');
499
+
481
500
  // Afficher un loader
482
501
  container.innerHTML = '<div style="padding: 20px; text-align: center; color: #6b7280;">Chargement des vidéos YouTube...</div>';
483
502
 
@@ -512,9 +531,15 @@
512
531
  let videos = data.items;
513
532
  bbContents.utils.log(`Vidéos reçues de l'API: ${videos.length} (allowShorts: ${allowShorts})`);
514
533
 
515
- // Vider le conteneur
534
+ // Vider le conteneur (en préservant les éléments marquee)
535
+ const marqueeElements = container.querySelectorAll('[data-bb-marquee-processed]');
516
536
  container.innerHTML = '';
517
537
 
538
+ // Restaurer les éléments marquee si présents
539
+ marqueeElements.forEach(marqueeEl => {
540
+ container.appendChild(marqueeEl);
541
+ });
542
+
518
543
  // Cloner le template pour chaque vidéo
519
544
  videos.forEach(item => {
520
545
  const videoId = item.id.videoId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bebranded/bb-contents",
3
- "version": "1.0.19-beta",
3
+ "version": "1.0.21-beta",
4
4
  "description": "Contenus additionnels français pour Webflow",
5
5
  "main": "bb-contents.js",
6
6
  "scripts": {