PageSourceSearch

https://www.rd.com/wp-content/themes/bumblebee/js/navigation-2021.js?ver=30.1.1

js rd.com collected 2026-09-24 07:14:47 UTC 5,054 bytes, 152 lines download raw bytes

1/* global jQuery bumblebee_nav_2021_data Bumblebee_Nav_Drawer */
2
3var Bumblebee_Nav_Drawer_2021 = {
4	toggleNavDrawer: function() {
5		var $drawer = jQuery( '#nav-drawer' );
6		$drawer.toggleClass( 'show' );
7
8		if ( $drawer.hasClass( 'show' ) ) {
9			Bumblebee_Nav_Drawer.open( '#nav-drawer .menu-wrapper' );
10		} else {
11			Bumblebee_Nav_Drawer.close();
12		}
13	},
14	initialize: function() {
15		if ( jQuery( '.header-nav-2021' ).length ) {
16			return;
17		}
18
19		var dropDownMenu = jQuery( '.menu-hamburger-menu-container' );
20		dropDownMenu.addClass( 'header-nav-2021' );
21
22		Bumblebee_Nav_Drawer_2021.addAccountSubmenu();
23
24		jQuery( '#menu-item-my-account > a' ).on( 'click', Bumblebee_Nav_Drawer_2021.toggleVerticalSubMenu );
25
26		Bumblebee_Nav_Drawer_2021.showLoginMenuItemsAtTop();
27	},
28	addAccountSubmenu: function() {
29		var accountMenu = bumblebee_nav_2021_data.nav_drawer_menu.logged_in_submenu;
30		if ( ! accountMenu ) {
31			return;
32		}
33		var dropDownMenu = jQuery( '.menu-hamburger-menu-container' );
34
35		jQuery( accountMenu )
36			.prependTo( dropDownMenu.find( 'ul' ).eq( 0 ) );
37		jQuery( '#menu-item-my-account a[data-name="Log out"]' )
38			.closest( 'li' )
39			.addClass( 'log-out-link' );
40	},
41	toggleVerticalSubMenu: function( event ) {
42		var linkSelected = jQuery( event.currentTarget );
43		var parentMenu   = linkSelected.closest( 'ul.hamburger-menu-items' );
44		var menuItem     = linkSelected.closest( 'li' );
45		var subMenu      = linkSelected.next( 'div' ).find( 'ul' );
46		var isActive     = menuItem.hasClass( 'active' );
47
48		parentMenu.addClass( 'active' );
49
50		if ( ! isActive ) {
51			menuItem.addClass( 'active' );
52			subMenu.addClass( 'active' );
53		} else {
54			Bumblebee_Nav_Drawer_2021.closeVerticalSubMenu( menuItem, subMenu );
55		}
56
57		// Close submenu if the nav drawer gets closed.
58		jQuery( '.hamburger-close' ).on( 'click', function() {
59			Bumblebee_Nav_Drawer_2021.closeVerticalSubMenu( menuItem, subMenu );
60		} );
61
62		// Clear active state if user switches to a different submenu.
63		jQuery( 'ul.hamburger-menu-items > li' ).not( menuItem ).on( 'click', function () {
64			linkSelected.next( 'ul' )
65				.removeClass( 'active' )
66				.hide();
67		} );
68	},
69	closeVerticalSubMenu: function( menuItem, subMenu ) {
70		menuItem.removeClass( 'active' );
71		subMenu
72			.removeClass( 'active' )
73			.hide();
74	},
75	showLoginMenuItemsAtTop: function() {
76		var mainMenu = jQuery( '.header-nav-2021 ul' );
77		mainMenu.find( 'li.login-class' )
78			.detach()
79			.prependTo( mainMenu );
80	},
81	scrollTopForMenuChangeOnMobile: function() {
82		jQuery( '.header-nav-2021 ul li.menu-item-has-children' ).on( 'click', function() {
83			if( jQuery( window ).width() > 480 ) {
84				return;
85			}
86			jQuery( '.header-nav-2021' ).scrollTop( 0 );
87		} );
88	},
89	scrollStickyHeaderObserver: function() {
90		if ( ! ( 'IntersectionObserver' in window ) ) {
91			return;
92		}
93
94		var observer = new IntersectionObserver( function( entries ) {
95			// Do not apply sticky header on homepage.
96			const home = document.querySelector( 'body.home' );
97			if ( home ) {
98				return;
99			}
100
101			const isDesktop   = window.innerWidth >= 1024;
102			const fixedHeader = document.querySelector( '#header-wrapper .nav-wrapper' );
103			const recircStrip = document.querySelector( '.tmbi-recirc-strip-sticky-desktop' );
104			const promoStrap  = document.querySelector( '.tmbi-promo-strap-sticky' );
105
106			if ( entries[0].intersectionRatio === 0 ) {
107				if ( isDesktop ) {
108					if ( ! fixedHeader ) {
109						return;
110					}
111					fixedHeader.classList.add( 'fixed-header' );
112					document.documentElement.style.setProperty( '--fixed-header-height', fixedHeader.offsetHeight + 'px' );
113
114					if ( recircStrip ) {
115						recircStrip.style.top = fixedHeader.offsetHeight + 'px';
116						document.documentElement.style.setProperty( '--recirc-strip-height', recircStrip.offsetHeight + 'px' );
117					}
118
119					if ( promoStrap ) {
120						promoStrap.style.top = fixedHeader.offsetHeight + 'px';
121						document.documentElement.style.setProperty( '--recirc-strip-height', promoStrap.offsetHeight + 'px' );
122					}
123				} else {
124					// Mobile: set --recirc-strip-height.
125					const mobileRecircStripPromo = document.querySelector( '.tmbi-recirc-strip-sticky-mobile' ) || promoStrap;
126					if ( mobileRecircStripPromo ) {
127						document.documentElement.style.setProperty( '--recirc-strip-height', mobileRecircStripPromo.offsetHeight + 'px' );
128					}
129				}
130			} else if ( entries[0].intersectionRatio === 1 ) {
131				if ( isDesktop && fixedHeader ) {
132					fixedHeader.classList.remove( 'fixed-header' );
133				}
134			}
135		}, { threshold: [0, 0.5, 1] } );
136
137		observer.observe( document.querySelector( '.secondary-nav' ) );
138	}
139};
140
141
142jQuery( function( $ ) {
143	$( document ).off( 'click', '.hamburger-wrapper, .hamburger-close', Bumblebee_Nav_Drawer.toggleNavDrawer );
144	$( document ).on( 'click', '.hamburger-wrapper, .hamburger-close', Bumblebee_Nav_Drawer_2021.toggleNavDrawer );
145
146	Bumblebee_Nav_Drawer_2021.initialize();
147	Bumblebee_Nav_Drawer.close();
148
149	Bumblebee_Nav_Drawer_2021.scrollTopForMenuChangeOnMobile();
150
151	Bumblebee_Nav_Drawer_2021.scrollStickyHeaderObserver();
152} );

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.