Dawn's cart-drawer.js Expliqué: Le Fichier Brut, la Structure et Comment le Personnaliser
Le guide complet du fichier brut cart-drawer.js de Shopify Dawn sur GitHub : ce qu'il fait, comment il est structuré et comment le personnaliser en toute
Le fichier à raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js est l'asset JavaScript compilé qui alimente le tiroir de panier coulissant de Dawn. Il définit l'élément personnalisé CartDrawer, gère les animations d'ouverture/fermeture, déclenche les mises à jour AJAX du panier et maintient l'état du tiroir synchronisé avec le reste de la page. Si vous avez recherché cette URL brute, vous essayez presque certainement de lire la source, de l'étendre ou de déboguer une personnalisation qui a cassé quelque chose.
Points clés à retenir
cart-drawer.jsréside dans le dossierassets/de Dawn et est chargé viatheme.liquiden tant que script différé.- La classe
CartDrawerest un Web Component (élément personnalisé) qui étendDraweret expose les méthodesopen()etclose(). - Le tiroir se re-rend en récupérant l'API Section Rendering de Shopify, et non en manipulant directement le DOM.
- La branche
mainde Dawn sur GitHub peut contenir du code non publié ; la version stable expédiée aux commerçants se trouve dans le Shopify Theme Store. - La modification directe de
cart-drawer.jsvous place sur un chemin de mise à jour manuelle. Préférez les app blocks ou un fichier asset séparé lorsque c'est possible.
Pourquoi les développeurs recherchent ce fichier brut
Dawn est le thème de référence gratuit de Shopify. En mars 2026, il alimente plus de 268 000 magasins Shopify actifs, ce qui en fait le thème le plus largement déployé sur la plateforme. Parce que la source complète est publique sur GitHub, les développeurs récupèrent régulièrement l'URL brute pour :
- Lire la classe
CartDrawersans naviguer dans l'interface de GitHub - Comparer leur copie locale par rapport à la branche
mainen amont pour détecter les changements de rupture après une mise à jour de thème - Copier des méthodes spécifiques (comme
renderContents()ougetSectionsToRender()) dans un script compagnon - Comprendre le système d'événements pub/sub avant d'écrire une intégration tierce
Le fichier est source-disponible, non open-source sous une licence permissive, alors vérifiez toujours les conditions de licence de Shopify avant de redistribuer une partie de celui-ci.
Comment le fichier est structuré
Dawn suit une philosophie « HTML d'abord, JavaScript uniquement si nécessaire », qui façonne exactement la façon dont cart-drawer.js est écrit. Voici ce que vous trouverez à l'intérieur du fichier :
- Classe de base
Drawer- Un Web Component générique qui gèreopen(),close(), le piégeage du focus et l'attributaria-expanded. Le tiroir de panier et le tiroir de menu mobile en héritent tous les deux. - Classe
CartDrawer- ÉtendDrawer. Lors deopen(), elle appellerenderContents()pour récupérer un rendu frais de la sectioncart-drawervia l'API Section Rendering de Shopify, puis remplace le HTML intérieur. C'est pourquoi le tiroir reflète toujours l'état actuel du panier sans rechargement de page. - Classe
CartDrawerItems- ÉtendCartItems(défini danscart.js). Elle gère les changements de quantité, la suppression d'articles et l'affichage des erreurs, en miroir du comportement du panier pleine page mais limité aux ID DOM du tiroir (préfixés parCartDrawer-). - Écouteurs d'événements - Le fichier écoute l'événement pub/sub
cart-updateafin que d'autres composants (ajout rapide, formulaires de produits) puissent déclencher un rafraîchissement du tiroir sans couplage direct à l'instanceCartDrawer.
La méthode getSectionsToRender() retourne un tableau de descripteurs de section, chacun mappant un ID de section à un sélecteur à l'intérieur du HTML du tiroir. Lorsque la réponse AJAX arrive, Dawn itère ce tableau et corrige uniquement les nœuds DOM pertinents, gardant les re-rendus chirurgicaux.
Comment lire le fichier brut sur GitHub
L'emplacement canonique est :
https://github.com/Shopify/dawn/blob/main/assets/cart-drawer.js
Pour obtenir la version en texte brut adaptée à curl, fetch ou un éditeur de code :
https://raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js
Pour épingler une version spécifique plutôt que la branche main mouvante, remplacez main par une étiquette, par exemple v15.4.1 (la version stable de décembre 2025). Cela vous donne une URL stable qui ne changera pas quand Shopify livrera du nouveau code :
https://raw.githubusercontent.com/Shopify/dawn/v15.4.1/assets/cart-drawer.js
Remarque : Shopify indique explicitement que la branche main peut contenir du code pour des fonctionnalités pas encore mises à disposition des commerçants. Si vous comparez par rapport à votre magasin en direct, comparez toujours par rapport à la version étiquetée qui correspond à votre version installée, pas main.
Comment personnaliser le tiroir de panier sans écraser le fichier
Éditer directement cart-drawer.js est la route la plus rapide et la plus douloureuse à long terme. Chaque mise à jour de thème Dawn livre une nouvelle version de ce fichier, et une édition manuelle signifie que vous devez réappliquer vos modifications à la main ou les perdre.
Voici des modèles plus sûrs, par ordre de préférence :
- Sous-classer dans un fichier asset séparé. Créez
assets/cart-drawer-custom.js, importez-le aprèscart-drawer.jsdanstheme.liquid, et étendez la classeCartDrawerau lieu de la modifier. Votre code survit aux mises à jour de thème. - Utilisez le système d'événements pub/sub. Dawn expose un utilitaire
subscribe(PUB_SUB_EVENTS.cartUpdate, callback). N'importe quel script peut écouter les changements de panier et réagir sans toucher aux méthodes internes du tiroir. - Utilisez un App Block. Si vous créez une application Shopify ou une personnalisation réutilisable, un App Block vous permet d'injecter du HTML et du script dans le pied de page du tiroir sans éditer du tout les fichiers de thème.
- Option sans code pour le type de panier. Dans l'admin Shopify, allez à Online Store > Themes > Customize > Theme Settings > Cart. Vous pouvez basculer le type de panier entre Drawer, Page et Notification sans écrire une seule ligne de code.
Si vous avez vraiment besoin d'éditer cart-drawer.js directement (par exemple, pour changer quelles sections sont récupérées dans getSectionsToRender()), contrôlez la version de votre thème sur GitHub et configurez un workflow de diff afin de voir ce qui a changé à chaque version de Dawn.
Personnalisations courantes et pièges connus
Ouvrir le tiroir par programmation. Le composant web CartDrawer expose une méthode CartDrawer.open() simple que de nombreux développeurs trouvent rapidement. La partie plus difficile est de rafraîchir le contenu du tiroir après un ajout au panier externe. Le modèle recommandé est de dispatcher un événement pub/sub cart-update après votre appel AJAX à /cart/add.js, plutôt que d'appeler directement les méthodes de rendu internes, car ces API internes changent entre les versions de Dawn.
Conventions de nommage des ID DOM. Dawn préfixe les ID d'éléments spécifiques au tiroir avec CartDrawer- (par exemple, CartDrawer-LineItemStatus, CartDrawer-CartErrors). Si vous portez une personnalisation du panier pleine page, attention à ces modèles d'ID doubles : le JavaScript dans cart.js et cart-drawer.js interrogent tous les deux getElementById('cart-errors') || getElementById('CartDrawer-CartErrors'), ce qui est pourquoi supprimer l'un des éléments peut produire des défaillances silencieuses.
Support des règles de quantité. Les versions actuelles de cart-drawer.js respectent les contraintes item.variant.quantity_rule (quantités minimales de commande, incréments et maximums), ce qui est important pour les magasins de vente en gros et B2B. Si vous ajoutez une logique de quantité personnalisée, vérifiez si la quantity_rule de la variante est déjà en cours de traitement avant d'ajouter votre propre couche de validation.
Couplage des classes CSS versus JS. Le HTML de Dawn utilise les mêmes noms de classe pour le style et les crochets JavaScript. Renommer une classe CSS comme drawer__inner-empty sans mettre à jour le sélecteur JavaScript correspondant cassera silencieusement le rendu de l'état panier vide.
L'angle inventaire que la plupart des développeurs oublient
Voici un modèle qui revient souvent pour les magasins Shopify en croissance : le tiroir de panier fonctionne parfaitement, les clients ajoutent des articles, puis un produit se retrouve en rupture de stock entre le moment où il a été ajouté au panier et le moment où le client se rend au paiement. Le tiroir n'a pas de mécanisme intégré pour avertir les acheteurs de manière proactive. C'est une limitation de la couche thème, pas un bug.
Le vrai correctif se trouve en amont, à la couche de gestion de l'inventaire. Connaître votre taux de vente, vos délais et votre point de commande pour chaque SKU signifie que vous pouvez garder les meilleures ventes en stock avant que le tiroir de panier ne doive jamais afficher une erreur « en rupture de stock ». Si votre équipe prend actuellement les décisions de commande au jugé ou en fixant une feuille de calcul, c'est là que les ruptures de stock proviennent vraiment.
Stockcast: Inventory Forecast surveille quotidiennement vos niveaux de stock Shopify, prédit les ruptures classées par urgence avec des mathématiques transparentes et étape par étape (pas une boîte noire), et envoie un digest quotidien pour que votre équipe d'opérations sache quoi réapprovisionner avant que les clients ne voient un problème de disponibilité dans le panier. Plan gratuit jusqu'à 25 SKUs, essai gratuit de 14 jours sur les plans payants.
FAQs
Q : Le fichier cart-drawer.js du dossier assets de Dawn est-il le même que cart.js ? Non. cart.js contient la classe de base CartItems et la logique du panier pleine page. cart-drawer.js importe ou étend cette classe de base et ajoute le comportement spécifique au tiroir, y compris le web component Drawer d'ouverture/fermeture et la sous-classe CartDrawerItems qui limite les requêtes DOM aux IDs préfixés par CartDrawer-.
Q : Comment découvrir quelle version de Dawn mon magasin Shopify exécute ? Allez à Online Store > Themes dans votre admin Shopify. Le numéro de version est listé sous le nom de votre thème actif. Vous pouvez ensuite faire correspondre cette version à une version étiquetée sur le dépôt GitHub à github.com/Shopify/dawn/releases et récupérer le fichier brut pour cette étiquette exacte.
Q : Puis-je récupérer en toute sécurité raw.githubusercontent.com/Shopify/dawn/main/assets/cart-drawer.js pour utiliser en production ? Non. La branche main est une branche de développement qui peut inclure du code pour des fonctionnalités pas encore mises à disposition des commerçants. Pour une référence de production, utilisez toujours une URL de version étiquetée (par exemple, v15.4.1). Charger le fichier brut directement depuis GitHub dans un contexte de navigateur est également déconseillé pour des raisons de performance et de fiabilité ; servez toujours les assets via le CDN de Shopify via le filtre Liquid asset_url.
Questions fréquentes
Le fichier cart-drawer.js du dossier assets de Dawn est-il le même que cart.js ?
Non. cart.js contient la classe de base CartItems et la logique du panier pleine page. cart-drawer.js étend cette base et ajoute le comportement spécifique au tiroir, y compris le web component Drawer et CartDrawerItems, qui limite toutes les requêtes DOM aux IDs préfixés par CartDrawer-.
Comment découvrir quelle version de Dawn mon magasin Shopify exécute ?
Allez à Online Store > Themes dans votre admin Shopify. Le numéro de version est listé sous le nom de votre thème actif. Vous pouvez alors le faire correspondre à une version étiquetée sur github.com/Shopify/dawn/releases et récupérer le fichier brut pour cette étiquette exacte, pas la branche main.
Puis-je récupérer en toute sécurité l'URL raw.githubusercontent.com pour cart-drawer.js de Dawn en production ?
Non. La branche main peut inclure du code non publié et peut changer à tout moment. Pour une référence stable, épinglez une URL de version étiquetée comme v15.4.1. Ne chargez jamais l'URL GitHub brute comme src de script en production ; servez les assets via le CDN de Shopify en utilisant le filtre Liquid asset_url.