@@ -68,16 +68,72 @@ class Theme {
6868 initMenuMobile ( ) {
6969 const $menuToggleMobile = document . getElementById ( 'menu-toggle-mobile' ) ;
7070 const $menuMobile = document . getElementById ( 'menu-mobile' ) ;
71+ const closeAllSubmenus = ( ) => {
72+ this . util . forEach ( document . querySelectorAll ( '#menu-mobile .has-children' ) , $menuItem => {
73+ $menuItem . classList . remove ( 'active' ) ;
74+ const $submenu = $menuItem . querySelector ( '.dropdown-menu' ) ;
75+ if ( $submenu ) {
76+ $submenu . style . display = 'none' ;
77+ $submenu . style . height = '' ;
78+ }
79+ } ) ;
80+ } ;
7181 $menuToggleMobile . addEventListener ( 'click' , ( ) => {
7282 document . body . classList . toggle ( 'blur' ) ;
7383 $menuToggleMobile . classList . toggle ( 'active' ) ;
7484 $menuMobile . classList . toggle ( 'active' ) ;
85+ if ( ! $menuMobile . classList . contains ( 'active' ) ) {
86+ closeAllSubmenus ( ) ;
87+ }
7588 } , false ) ;
7689 this . _menuMobileOnClickMask = this . _menuMobileOnClickMask || ( ( ) => {
7790 $menuToggleMobile . classList . remove ( 'active' ) ;
7891 $menuMobile . classList . remove ( 'active' ) ;
92+ closeAllSubmenus ( ) ;
7993 } ) ;
8094 this . clickMaskEventSet . add ( this . _menuMobileOnClickMask ) ;
95+
96+ this . util . forEach ( document . querySelectorAll ( '#menu-mobile .has-children' ) , $menuItem => {
97+ const $submenu = $menuItem . querySelector ( '.dropdown-menu' ) ;
98+ if ( $submenu ) {
99+ $submenu . style . transition = 'height 0.35s ease' ;
100+ $submenu . style . overflow = 'hidden' ;
101+ $submenu . style . display = 'none' ;
102+ }
103+ } ) ;
104+
105+ $menuMobile . addEventListener ( 'click' , ( event ) => {
106+ const $clickedItem = event . target . closest ( 'a.dropdown-toggle' ) ;
107+ if ( ! $clickedItem ) return ;
108+
109+ event . preventDefault ( ) ;
110+ const $menuItem = $clickedItem . parentElement ;
111+ const $submenu = $menuItem . querySelector ( '.dropdown-menu' ) ;
112+
113+ if ( ! $submenu ) return ;
114+
115+ $menuItem . classList . toggle ( 'active' ) ;
116+ if ( $submenu . style . display === 'block' ) {
117+ $submenu . style . height = `${ $submenu . scrollHeight } px` ;
118+ window . setTimeout ( ( ) => { $submenu . style . height = '0' ; } , 0 ) ;
119+ $submenu . addEventListener ( 'transitionend' , ( ) => { $submenu . style . display = 'none' ; } , { once : true } ) ;
120+ } else {
121+ $submenu . style . display = 'block' ;
122+ $submenu . style . height = '0' ;
123+ window . setTimeout ( ( ) => { $submenu . style . height = `${ $submenu . scrollHeight } px` ; } , 0 ) ;
124+ $submenu . addEventListener ( 'transitionend' , ( ) => { $submenu . style . height = '' ; } , { once : true } ) ;
125+ }
126+ } ) ;
127+
128+ if ( ! this . util . isMobile ( ) ) {
129+ this . util . forEach ( document . querySelectorAll ( '#header-desktop .has-children .dropdown-item.active' ) , $activeChild => {
130+ const $parentMenuItem = $activeChild . closest ( '.has-children' ) ;
131+ if ( $parentMenuItem ) {
132+ const $parentLink = $parentMenuItem . querySelector ( 'a.dropdown-toggle' ) ;
133+ if ( $parentLink ) $parentLink . style . fontWeight = 'bold' ;
134+ }
135+ } ) ;
136+ }
81137 }
82138
83139 initSwitchTheme ( ) {
0 commit comments