@bebranded/bb-contents 1.0.18-beta → 1.0.20-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.
- package/bb-contents.js +47 -40
- 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.
|
|
4
|
+
* @version 1.0.20-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.
|
|
20
|
+
version: '1.0.20-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: {
|
|
@@ -304,7 +304,7 @@
|
|
|
304
304
|
}
|
|
305
305
|
},
|
|
306
306
|
|
|
307
|
-
// Module Marquee - Version
|
|
307
|
+
// Module Marquee - Version simplifiée et corrigée
|
|
308
308
|
marquee: {
|
|
309
309
|
detect: function(scope) {
|
|
310
310
|
return scope.querySelector('[bb-marquee]') !== null;
|
|
@@ -317,10 +317,14 @@
|
|
|
317
317
|
bbContents.utils.log('Module détecté: marquee');
|
|
318
318
|
|
|
319
319
|
elements.forEach(element => {
|
|
320
|
-
|
|
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
|
-
// Récupérer les options
|
|
327
|
+
// Récupérer les options
|
|
324
328
|
const speed = bbContents._getAttr(element, 'bb-marquee-speed') || '100';
|
|
325
329
|
const direction = bbContents._getAttr(element, 'bb-marquee-direction') || 'left';
|
|
326
330
|
const pause = bbContents._getAttr(element, 'bb-marquee-pause') || 'true';
|
|
@@ -329,8 +333,8 @@
|
|
|
329
333
|
const height = bbContents._getAttr(element, 'bb-marquee-height');
|
|
330
334
|
const minHeight = bbContents._getAttr(element, 'bb-marquee-min-height');
|
|
331
335
|
|
|
332
|
-
//
|
|
333
|
-
const
|
|
336
|
+
// Sauvegarder le contenu original
|
|
337
|
+
const originalContent = element.innerHTML;
|
|
334
338
|
|
|
335
339
|
// Créer le conteneur principal
|
|
336
340
|
const mainContainer = document.createElement('div');
|
|
@@ -342,7 +346,7 @@
|
|
|
342
346
|
${minHeight ? `min-height: ${minHeight};` : ''}
|
|
343
347
|
`;
|
|
344
348
|
|
|
345
|
-
// Créer le conteneur de défilement
|
|
349
|
+
// Créer le conteneur de défilement
|
|
346
350
|
const scrollContainer = document.createElement('div');
|
|
347
351
|
scrollContainer.style.cssText = `
|
|
348
352
|
display: flex;
|
|
@@ -350,48 +354,43 @@
|
|
|
350
354
|
${orientation === 'vertical' ? 'flex-direction: column;' : ''}
|
|
351
355
|
gap: ${gap}px;
|
|
352
356
|
will-change: transform;
|
|
353
|
-
${orientation === 'vertical' ? 'white-space: nowrap;' : ''}
|
|
354
357
|
`;
|
|
355
358
|
|
|
356
|
-
// Dupliquer le contenu
|
|
357
|
-
const originalContent = element.innerHTML;
|
|
359
|
+
// Dupliquer le contenu
|
|
358
360
|
scrollContainer.innerHTML = originalContent + originalContent;
|
|
359
361
|
|
|
360
|
-
//
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
100% { transform: translateY(-50%); }
|
|
370
|
-
}
|
|
371
|
-
`;
|
|
372
|
-
document.head.appendChild(style);
|
|
362
|
+
// Assembler
|
|
363
|
+
mainContainer.appendChild(scrollContainer);
|
|
364
|
+
// Sauvegarder le contenu original avant de vider
|
|
365
|
+
const originalMarqueeContent = element.innerHTML;
|
|
366
|
+
element.innerHTML = '';
|
|
367
|
+
element.appendChild(mainContainer);
|
|
368
|
+
|
|
369
|
+
// Marquer l'élément comme traité par le module marquee
|
|
370
|
+
element.setAttribute('data-bb-marquee-processed', 'true');
|
|
373
371
|
|
|
374
|
-
//
|
|
372
|
+
// Animation JavaScript simple et efficace
|
|
375
373
|
const isVertical = orientation === 'vertical';
|
|
376
374
|
let animationId;
|
|
377
375
|
let startTime;
|
|
378
376
|
let currentPosition = 0;
|
|
379
|
-
const contentSize = isVertical ? scrollContainer.scrollHeight / 2 : scrollContainer.scrollWidth / 2;
|
|
380
377
|
|
|
381
378
|
const animate = (timestamp) => {
|
|
382
379
|
if (!startTime) startTime = timestamp;
|
|
383
380
|
const elapsed = timestamp - startTime;
|
|
384
381
|
|
|
385
|
-
//
|
|
382
|
+
// Vitesse en millisecondes
|
|
383
|
+
const speedMs = parseInt(speed);
|
|
386
384
|
const progress = (elapsed % speedMs) / speedMs;
|
|
385
|
+
|
|
386
|
+
// Calculer la taille du contenu
|
|
387
|
+
const contentSize = isVertical ? scrollContainer.scrollHeight / 2 : scrollContainer.scrollWidth / 2;
|
|
387
388
|
currentPosition = -progress * contentSize;
|
|
388
389
|
|
|
389
390
|
// Appliquer la transformation
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
scrollContainer.style.transform = `translateX(${currentPosition}px)`;
|
|
394
|
-
}
|
|
391
|
+
scrollContainer.style.transform = isVertical
|
|
392
|
+
? `translateY(${currentPosition}px)`
|
|
393
|
+
: `translateX(${currentPosition}px)`;
|
|
395
394
|
|
|
396
395
|
animationId = requestAnimationFrame(animate);
|
|
397
396
|
};
|
|
@@ -428,14 +427,9 @@
|
|
|
428
427
|
mainContainer.style.height = maxHeight + 'px';
|
|
429
428
|
}
|
|
430
429
|
}
|
|
431
|
-
|
|
432
|
-
// Assembler
|
|
433
|
-
mainContainer.appendChild(scrollContainer);
|
|
434
|
-
element.innerHTML = '';
|
|
435
|
-
element.appendChild(mainContainer);
|
|
436
430
|
});
|
|
437
431
|
|
|
438
|
-
bbContents.utils.log('Module Marquee
|
|
432
|
+
bbContents.utils.log('Module Marquee initialisé:', elements.length, 'éléments');
|
|
439
433
|
}
|
|
440
434
|
},
|
|
441
435
|
|
|
@@ -452,7 +446,11 @@
|
|
|
452
446
|
bbContents.utils.log('Module détecté: youtube');
|
|
453
447
|
|
|
454
448
|
elements.forEach(element => {
|
|
455
|
-
|
|
449
|
+
// Vérifier si l'élément a déjà été traité par un autre module
|
|
450
|
+
if (element.bbProcessed || element.hasAttribute('data-bb-marquee-processed')) {
|
|
451
|
+
bbContents.utils.log('Élément youtube déjà traité par un autre module, ignoré:', element);
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
456
454
|
element.bbProcessed = true;
|
|
457
455
|
|
|
458
456
|
const channelId = bbContents._getAttr(element, 'bb-youtube-channel');
|
|
@@ -493,6 +491,9 @@
|
|
|
493
491
|
// Cacher le template original
|
|
494
492
|
template.style.display = 'none';
|
|
495
493
|
|
|
494
|
+
// Marquer l'élément comme traité par le module YouTube
|
|
495
|
+
element.setAttribute('data-bb-youtube-processed', 'true');
|
|
496
|
+
|
|
496
497
|
// Afficher un loader
|
|
497
498
|
container.innerHTML = '<div style="padding: 20px; text-align: center; color: #6b7280;">Chargement des vidéos YouTube...</div>';
|
|
498
499
|
|
|
@@ -527,9 +528,15 @@
|
|
|
527
528
|
let videos = data.items;
|
|
528
529
|
bbContents.utils.log(`Vidéos reçues de l'API: ${videos.length} (allowShorts: ${allowShorts})`);
|
|
529
530
|
|
|
530
|
-
// Vider le conteneur
|
|
531
|
+
// Vider le conteneur (en préservant les éléments marquee)
|
|
532
|
+
const marqueeElements = container.querySelectorAll('[data-bb-marquee-processed]');
|
|
531
533
|
container.innerHTML = '';
|
|
532
534
|
|
|
535
|
+
// Restaurer les éléments marquee si présents
|
|
536
|
+
marqueeElements.forEach(marqueeEl => {
|
|
537
|
+
container.appendChild(marqueeEl);
|
|
538
|
+
});
|
|
539
|
+
|
|
533
540
|
// Cloner le template pour chaque vidéo
|
|
534
541
|
videos.forEach(item => {
|
|
535
542
|
const videoId = item.id.videoId;
|