@@ -13,10 +13,12 @@ hljs.registerLanguage('json', json);
1313hljs . registerLanguage ( 'sh' , bash ) ;
1414
1515let initialized = false ;
16+ // eslint-disable-next-line max-statements -- a lot of browser logic here
1617function init ( ) {
1718 if ( initialized ) return ;
1819 initialized = true ;
1920 const CONTENT_MENU_TOP = 150 ;
21+ const SECTION_MENU_TOP = 150 ;
2022 const menuSwitcher = document . getElementById ( 'menu-switcher' ) ;
2123 const menuBackdrop = document . querySelector ( '.menu > .backdrop' ) ;
2224 const [ menu ] = document . getElementsByClassName ( 'menu' ) ;
@@ -30,9 +32,10 @@ function init() {
3032 const docsVersionLinks = document . querySelectorAll ( '.with-docs-version' ) ;
3133 const docsMenuItems = document . querySelectorAll ( '.docs-menu li > a' ) ;
3234 const docsCollapsibleMenuItems = document . querySelectorAll ( '.docs-menu > ul > li.collapsible' ) ;
33- const mobileDocsMenuItems = document . querySelectorAll ( '.mobile-docs-menu li > a' ) ;
3435 const contentMenu = document . querySelector ( '.table-of-contents' ) ;
3536 const contentMenuTrigger = document . querySelector ( '.table-of-contents .mobile-trigger' ) ;
37+ const sectionMenu = document . querySelector ( '.docs-menu' ) ;
38+ const sectionMenuTrigger = document . querySelector ( '.docs-menu .mobile-trigger' ) ;
3639 let isDocs , docsVersion ;
3740 const currentPath = getRelativePath ( ) ;
3841
@@ -153,24 +156,17 @@ function init() {
153156 }
154157 }
155158
156- let mobileFound = false ;
157- for ( const link of mobileDocsMenuItems ) {
158- const href = link . getAttribute ( 'href' ) ;
159- if ( href && href === currentPath ) {
160- setActiveDocsMenuItem ( link ) ;
161- mobileFound = true ;
162- break ;
163- }
164- }
165-
166159 ! found && setActiveDocsMenuItem ( docsMenuItems [ 0 ] ) ;
167- ! mobileFound && setActiveDocsMenuItem ( mobileDocsMenuItems [ 0 ] ) ;
168160 }
169161
170162 function fixContentMenuPosition ( scroll ) {
171163 contentMenu . style . top = scroll <= CONTENT_MENU_TOP ? `${ CONTENT_MENU_TOP - scroll } px` : 'unset' ;
172164 }
173165
166+ function fixSectionMenuPosition ( scroll ) {
167+ sectionMenu . style . top = scroll <= SECTION_MENU_TOP ? `${ SECTION_MENU_TOP - scroll } px` : 'unset' ;
168+ }
169+
174170 function openFirstCollapsibleMenuItem ( ) {
175171 if ( ! isDocsPage ( ) ) return ;
176172 docsCollapsibleMenuItems [ 0 ] . classList . add ( 'active' ) ;
@@ -179,6 +175,7 @@ function init() {
179175 function processStickyBlocks ( ) {
180176 if ( stickyBlocks ) {
181177 const contentMenuPosition = contentMenu && globalThis . getComputedStyle ( contentMenu ) . position ;
178+ const sectionMenuPosition = sectionMenu && globalThis . getComputedStyle ( sectionMenu ) . position ;
182179 let stuck = window . pageYOffset > 150 ;
183180 if ( stuck ) addStuck ( ) ;
184181 window . addEventListener ( 'scroll' , ( ) => {
@@ -194,6 +191,9 @@ function init() {
194191 if ( contentMenuPosition === 'fixed' ) {
195192 fixContentMenuPosition ( yScroll ) ;
196193 }
194+ if ( sectionMenuPosition === 'fixed' ) {
195+ fixSectionMenuPosition ( yScroll ) ;
196+ }
197197 } ) ;
198198 }
199199 }
@@ -209,6 +209,17 @@ function init() {
209209 contentMenuTrigger && contentMenuTrigger . addEventListener ( 'click' , e => {
210210 e . preventDefault ( ) ;
211211 contentMenu . classList . toggle ( 'active' ) ;
212+ if ( contentMenu . classList . contains ( 'active' ) && sectionMenu && sectionMenu . classList . contains ( 'active' ) ) {
213+ sectionMenu . classList . remove ( 'active' ) ;
214+ }
215+ } ) ;
216+
217+ sectionMenuTrigger && sectionMenuTrigger . addEventListener ( 'click' , e => {
218+ e . preventDefault ( ) ;
219+ sectionMenu . classList . toggle ( 'active' ) ;
220+ if ( sectionMenu . classList . contains ( 'active' ) && contentMenu && contentMenu . classList . contains ( 'active' ) ) {
221+ contentMenu . classList . remove ( 'active' ) ;
222+ }
212223 } ) ;
213224
214225 hljs . addPlugin ( new RunButtonPlugin ( ) ) ;
0 commit comments