From 81353715a4fff7b3301c6a38f40510771abd5ea5 Mon Sep 17 00:00:00 2001
From: Martin Leblanc <m26lebla@uwaterloo.ca>
Date: Thu, 20 Feb 2025 10:55:53 -0500
Subject: [PATCH] ISTWCMS-5650: Add window the scope of the Flickity carousel
 in banners.js

---
 src/patterns/04-components/banners/banners.js | 29 ++++++++++---------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/src/patterns/04-components/banners/banners.js b/src/patterns/04-components/banners/banners.js
index 257ca30a..f5b89b16 100644
--- a/src/patterns/04-components/banners/banners.js
+++ b/src/patterns/04-components/banners/banners.js
@@ -4,13 +4,12 @@
  * Ensures autoplay, navigation, and pause/play functionality.
  */
 
-(function ($, Drupal, Flickity) {
+(function ($, Drupal, window) {
   'use strict';
 
   Drupal.behaviors.bannersFlickity = {
     attach: function () {
       $(document).ready(function () {
-
         document.querySelectorAll('.uw-carousel__banner').forEach(function (banner) {
           var selector = 'div[data-uuid="' + banner.getAttribute('data-uuid') + '"] .carousel';
           var elem = document.querySelector(selector);
@@ -20,7 +19,8 @@
 
           // Get the slide speed and autoplay settings.
           var bannerSlideSpeed = parseInt(banner.getAttribute('data-slide-speed'), 10) || 3000;
-          var bannerAutoplay = banner.getAttribute('data-autoplay') !== '0' && !document.querySelector('.layout-builder');
+          var bannerAutoplay = banner.getAttribute('data-autoplay') !== '0' &&
+            !document.querySelector('.layout-builder');
 
           // Add a class if there's only one slide.
           if (elem.children.length <= 1) {
@@ -31,48 +31,51 @@
           var bannerDots = elem.children.length > 1;
 
           // Ensure Flickity is defined before initializing.
-          if (typeof Flickity === 'undefined') {
+          if (typeof window.Flickity === 'undefined') {
             console.error('Flickity is not defined. Ensure the library is loaded.');
             return;
           }
 
-          var flkty = new Flickity(elem, {
+          var flkty = new window.Flickity(elem, {
             autoPlay: bannerAutoplay ? bannerSlideSpeed : false,
             draggable: true,
             fade: true,
             cellSelector: '.card__banner',
             pageDots: bannerDots,
             on: {
-              ready: function(){
+              ready: function () {
                 var dots = document.querySelectorAll('.flickity-page-dots .dot');
 
                 if (!dots.length) {
                   return;
                 }
 
-                dots.forEach(function(dot){
-                  // Make dots focusable
+                dots.forEach(function (dot) {
+                  // Make dots focusable.
                   dot.setAttribute('tabindex', '0');
 
-                  dot.addEventListener('keydown', function(event){
+                  dot.addEventListener('keydown', function (event) {
                     if (event.key === 'Enter' || event.keyCode === 13) {
                       var label = dot.getAttribute('aria-label');
-                      // Get "Page dot # // Extract the number"
+
+                      // Extract the number from "Page dot #".
                       var match = label.match(/\d+/);
                       if (!match) {
                         return;
                       }
 
-                      // Convert to zero-based index
+                      // Convert to zero-based index.
                       var targetIndex = parseInt(match[0], 10) - 1;
 
-                      flkty.select(targetIndex); // Move to the slide
+                      // Move to the slide.
+                      flkty.select(targetIndex);
                     }
                   });
                 });
               }
             }
           });
+
           // Get play and pause buttons.
           var bannerPlay = banner.querySelector('.uw-play');
           var bannerPause = banner.querySelector('.uw-pause');
@@ -108,4 +111,4 @@
       });
     }
   };
-})(jQuery,Drupal, Flickity);
+})(jQuery, Drupal, window);
-- 
GitLab