@bebranded/bb-contents 1.1.2 → 1.1.3

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 +29 -13
  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.1.2
4
+ * @version 1.1.3
5
5
  * @author BeBranded
6
6
  * @license MIT
7
7
  * @website https://www.bebranded.xyz
@@ -10,7 +10,7 @@
10
10
  'use strict';
11
11
 
12
12
  // Version du script
13
- const BB_CONTENTS_VERSION = '1.1.2';
13
+ const BB_CONTENTS_VERSION = '1.1.3';
14
14
 
15
15
  // Créer l'objet temporaire pour la configuration si il n'existe pas
16
16
  if (!window._bbContentsConfig) {
@@ -2588,33 +2588,38 @@
2588
2588
  if (data.error) {
2589
2589
  throw new Error(data.error.message || 'Erreur API YouTube');
2590
2590
  }
2591
- return data.items || [];
2591
+ return { success: true, items: data.items || [] };
2592
2592
  })
2593
2593
  .catch(error => {
2594
- // En cas d'erreur pour une chaîne, retourner un tableau vide
2594
+ // En cas d'erreur pour une chaîne, retourner un objet avec success: false
2595
2595
  // Les autres chaînes continueront à fonctionner
2596
- return [];
2596
+ return { success: false, items: [] };
2597
2597
  });
2598
2598
  });
2599
2599
 
2600
- return Promise.all(promises).then(allItems => {
2600
+ return Promise.all(promises).then(allResults => {
2601
+ // Vérifier si toutes les chaînes ont échoué
2602
+ const allChannelsFailed = allResults.every(result => !result.success);
2603
+
2601
2604
  // Fusionner tous les items de toutes les chaînes
2602
- const mergedItems = [].concat(...allItems);
2605
+ const mergedItems = [].concat(...allResults.map(result => result.items));
2603
2606
 
2604
2607
  // Trier par date (publishedAt) - du plus récent au plus ancien
2608
+ // Protection contre publishedAt manquant
2605
2609
  mergedItems.sort((a, b) => {
2606
- const dateA = new Date(a.snippet.publishedAt);
2607
- const dateB = new Date(b.snippet.publishedAt);
2610
+ const dateA = new Date(a.snippet?.publishedAt || 0);
2611
+ const dateB = new Date(b.snippet?.publishedAt || 0);
2608
2612
  return dateB - dateA;
2609
2613
  });
2610
2614
 
2611
- // Retourner dans le format attendu
2615
+ // Retourner dans le format attendu avec flag d'erreur
2612
2616
  return {
2613
2617
  items: mergedItems,
2614
2618
  pageInfo: {
2615
2619
  totalResults: mergedItems.length,
2616
2620
  resultsPerPage: mergedItems.length
2617
- }
2621
+ },
2622
+ allChannelsFailed: allChannelsFailed
2618
2623
  };
2619
2624
  });
2620
2625
  },
@@ -2639,7 +2644,12 @@
2639
2644
 
2640
2645
  generateYouTubeFeed: function(container, template, data, allowShorts, language = 'fr') {
2641
2646
  if (!data || !data.items || data.items.length === 0) {
2642
- container.innerHTML = '<div style="padding: 20px; text-align: center; color: #6b7280;">Aucune vidéo trouvée</div>';
2647
+ // Distinguer "aucune vidéo" de "toutes les chaînes ont échoué"
2648
+ if (data && data.allChannelsFailed) {
2649
+ container.innerHTML = '<div style="padding: 20px; background: #fef2f2; border: 1px solid #fecaca; border-radius: 8px; color: #dc2626; text-align: center;"><strong>Erreur de chargement</strong><br>Impossible de récupérer les vidéos des chaînes YouTube</div>';
2650
+ } else {
2651
+ container.innerHTML = '<div style="padding: 20px; text-align: center; color: #6b7280;">Aucune vidéo trouvée</div>';
2652
+ }
2643
2653
  return;
2644
2654
  }
2645
2655
 
@@ -2658,7 +2668,13 @@
2658
2668
 
2659
2669
  // Cloner le template pour chaque vidéo
2660
2670
  videos.forEach(item => {
2661
- const videoId = item.id.videoId;
2671
+ // Validation de videoId avant utilisation
2672
+ const videoId = item.id?.videoId;
2673
+ if (!videoId) {
2674
+ // Ignorer les vidéos sans ID valide
2675
+ return;
2676
+ }
2677
+
2662
2678
  const snippet = item.snippet;
2663
2679
 
2664
2680
  // Cloner le template
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bebranded/bb-contents",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "Contenus additionnels français pour Webflow",
5
5
  "main": "bb-contents.js",
6
6
  "scripts": {