Conditionally use Drupal's jQuery only if available
authorColeman Watts <coleman@civicrm.org>
Thu, 6 Jun 2019 00:54:47 +0000 (20:54 -0400)
committerColeman Watts <coleman@civicrm.org>
Thu, 6 Jun 2019 17:36:57 +0000 (13:36 -0400)
js/crm.drupal8.js

index ea8dadd79f6215d0f6b43aa586d600387b4e9259..91c7080fbe293a5f50f466857b2e50ed230a911e 100644 (file)
@@ -17,13 +17,16 @@ localStorage.setItem('Drupal.toolbar.activeTabID', JSON.stringify('toolbar-item-
 
   // Wait for document.ready so Drupal's jQuery is available to this script
   $(function($) {
-    // Need Drupal's jQuery to listen to this event
-    jQuery(document).on('drupalToolbarTabChange', function(event, tab) {
-      if (CRM.menubar && CRM.menubar.position === 'below-cms-menu') {
-        var action = jQuery(tab).is('#toolbar-item-civicrm') ? 'show' : 'hide';
-        CRM.menubar[action]();
-      }
-    });
+    // If Drupal's jQuery isn't loaded (e.g. on a stripped-down front-end page), we don't need to worry about the toolbar
+    if (window.jQuery) {
+      // This event is only triggered by Drupal's copy of jQuery. CRM.$ won't pick it up.
+      jQuery(document).on('drupalToolbarTabChange', function (event, tab) {
+        if (CRM.menubar && CRM.menubar.position === 'below-cms-menu') {
+          var action = jQuery(tab).is('#toolbar-item-civicrm') ? 'show' : 'hide';
+          CRM.menubar[action]();
+        }
+      });
+    }
   });
 
 })(CRM.$);