@@ -28,17 +28,128 @@ let hasInitialized = false;
2828 }
2929 } ) ;
3030 } ) ;
31- observer . observe ( document . body , {
32- childList : true ,
33- subtree : true
34- } ) ;
31+ observer . observe ( document . body , { childList : true , subtree : true } ) ;
32+
3533 initializeScripts ( ) ;
3634 }
3735 } ;
3836
37+ window . MudDrawerInterop = {
38+ initialize : function ( ) {
39+ const drawerToggleElements = document . querySelectorAll ( '[data-mud-drawer-toggle]' ) ;
40+
41+ drawerToggleElements . forEach ( element => {
42+ element . removeEventListener ( 'click' , this . handleToggleDrawer ) ;
43+ element . addEventListener ( 'click' , this . handleToggleDrawer ) ;
44+ } ) ;
45+
46+ const responsiveDrawer = document . querySelectorAll ( '.mud-drawer-responsive' ) [ 0 ] ;
47+
48+ if ( responsiveDrawer ) {
49+ MudDrawerInterop . monitorResize ( responsiveDrawer ) ;
50+ }
51+ } ,
52+
53+ monitorResize ( responsiveDrawer ) {
54+ const classSections = Array . from ( responsiveDrawer . parentElement . classList ) . find ( className => className . includes ( 'responsive' ) ) . split ( '-' ) ;
55+ const breakpoint = classSections [ classSections . length - 2 ] ;
56+ const position = classSections [ classSections . length - 1 ] ;
57+ const breakpointValue = MudDrawerInterop . getBreakpointValue ( breakpoint ) ;
58+ const resizeQuery = window . matchMedia ( `(min-width: ${ breakpointValue } px)` ) ;
59+
60+ if ( responsiveDrawer . parentElement . offsetWidth <= breakpointValue ) {
61+ MudDrawerInterop . autoCollapse ( responsiveDrawer , breakpoint , position ) ;
62+ } else {
63+ MudDrawerInterop . autoExpand ( responsiveDrawer , breakpoint , position ) ;
64+ }
65+
66+ resizeQuery . addEventListener ( 'change' , ev => {
67+ if ( ev . matches ) {
68+ MudDrawerInterop . autoExpand ( responsiveDrawer , breakpoint , position ) ;
69+ }
70+ else {
71+ MudDrawerInterop . autoCollapse ( responsiveDrawer , breakpoint , position ) ;
72+ }
73+ } )
74+ } ,
75+
76+ getBreakpointValue ( breakpoint ) {
77+ switch ( breakpoint ) {
78+ case 'xs' : return 380 ;
79+ case 'sm' : return 600 ;
80+ case 'md' : return 960 ;
81+ case 'lg' : return 1280 ;
82+ case 'xl' : return 1920 ;
83+ }
84+ } ,
85+
86+ autoCollapse ( responsiveDrawer , breakpoint , position ) {
87+ responsiveDrawer . classList . add ( 'mud-drawer--closed' ) ;
88+ responsiveDrawer . classList . remove ( 'mud-drawer--open' ) ;
89+ responsiveDrawer . parentElement . classList . add ( `mud-drawer-closed-responsive-${ breakpoint } -${ position } ` )
90+ responsiveDrawer . parentElement . classList . remove ( `mud-drawer-open-responsive-${ breakpoint } -${ position } ` )
91+ } ,
92+
93+ autoExpand ( responsiveDrawer , breakpoint , position ) {
94+ responsiveDrawer . classList . add ( 'mud-drawer--open' ) ;
95+ responsiveDrawer . classList . remove ( 'mud-drawer--closed' ) ;
96+ responsiveDrawer . parentElement . classList . add ( `mud-drawer-open-responsive-${ breakpoint } -${ position } ` )
97+ responsiveDrawer . parentElement . classList . remove ( `mud-drawer-closed-responsive-${ breakpoint } -${ position } ` )
98+ } ,
99+
100+ handleToggleDrawer : function ( event ) {
101+ const element = event . currentTarget ;
102+ const targetDrawerId = element . getAttribute ( 'data-mud-drawer-toggle' ) ;
103+
104+ MudDrawerInterop . toggleDrawer ( targetDrawerId ) ;
105+ } ,
106+
107+ toggleDrawer : function ( drawerId ) {
108+ let mudDrawer ;
109+
110+ if ( drawerId === '_no_id_provided_' ) {
111+ mudDrawer = document . querySelectorAll ( '.mud-drawer' ) [ 0 ] ;
112+ } else {
113+ mudDrawer = document . getElementById ( drawerId ) ;
114+ }
115+
116+ if ( mudDrawer ) {
117+ mudDrawer . classList . toggle ( 'mud-drawer--open' ) ;
118+ mudDrawer . classList . toggle ( 'mud-drawer--closed' ) ;
119+ mudDrawer . classList . remove ( 'mud-drawer--initial' ) ;
120+ }
121+
122+ const header = document . querySelector ( '.mud-drawer-header' ) ;
123+
124+ if ( header ) {
125+ if ( mudDrawer . className . includes ( 'mud-drawer--closed' ) === true ) {
126+ header . classList . add ( 'mud-typography-nowrap' ) ;
127+ }
128+ else {
129+ header . classList . remove ( 'mud-typography-nowrap' ) ;
130+ }
131+ }
132+
133+ const layout = mudDrawer . parentElement ;
134+
135+ if ( layout ) {
136+ if ( layout . className . includes ( 'mud-drawer-open' ) === true ) {
137+ layout . className = layout . className . replace ( / \b m u d - d r a w e r - o p e n \b / g, 'mud-drawer-closed' ) ;
138+ } else {
139+ layout . className = layout . className . replace ( / \b m u d - d r a w e r - c l o s e d \b / g, 'mud-drawer-open' ) ;
140+
141+ if ( mudDrawer . className . includes ( 'mud-static-responsive' ) ) {
142+ mudDrawer . classList . add ( 'mud-drawer-clipped-always' ) ;
143+ }
144+ }
145+ }
146+ } ,
147+ } ;
148+
39149 function ensureInitialized ( ) {
40150 if ( window . MutationObserverModule && ! hasInitialized ) {
41151 window . MutationObserverModule . initialize ( ) ;
152+ window . MudDrawerInterop . initialize ( ) ;
42153 }
43154 }
44155
0 commit comments