@@ -113,6 +113,7 @@ function SidenavService($mdComponentRegistry, $mdUtil, $q, $log) {
113
113
114
114
return angular . extend ( {
115
115
isLockedOpen : falseFn ,
116
+ isLockedClosed : falseFn ,
116
117
isOpen : falseFn ,
117
118
toggle : rejectFn ,
118
119
open : rejectFn ,
@@ -244,16 +245,19 @@ function SidenavFocusDirective() {
244
245
* @param {expression= } md-is-locked-open When this expression evaluates to true,
245
246
* the sidenav 'locks open': it falls into the content's flow instead
246
247
* of appearing over it. This overrides the `md-is-open` attribute.
248
+ * @param {expression= } md-is-locked-closed When this expression evaluates to true,
249
+ * the sidenav 'locks closed': hides sidenav.
247
250
* @param {string= } md-disable-scroll-target Selector, pointing to an element, whose scrolling will
248
251
* be disabled when the sidenav is opened. By default this is the sidenav's direct parent.
249
252
*
250
- * The $mdMedia() service is exposed to the is-locked-open attribute , which
253
+ * The $mdMedia() service is exposed to the is-locked-open and is-locked-closed attributes , which
251
254
* can be given a media query or one of the `sm`, `gt-sm`, `md`, `gt-md`, `lg` or `gt-lg` presets.
252
255
* Examples:
253
256
*
254
257
* - `<md-sidenav md-is-locked-open="shouldLockOpen"></md-sidenav>`
255
258
* - `<md-sidenav md-is-locked-open="$mdMedia('min-width: 1000px')"></md-sidenav>`
256
259
* - `<md-sidenav md-is-locked-open="$mdMedia('sm')"></md-sidenav>` (locks open on small screens)
260
+ * - `<md-sidenav md-is-locked-closed="$mdMedia('sm')"></md-sidenav>` (locks closed on small screens)
257
261
*/
258
262
function SidenavDirective ( $mdMedia , $mdUtil , $mdConstant , $mdTheming , $mdInteraction , $animate ,
259
263
$compile , $parse , $log , $q , $document , $window , $$rAF ) {
@@ -282,8 +286,9 @@ function SidenavDirective($mdMedia, $mdUtil, $mdConstant, $mdTheming, $mdInterac
282
286
var previousContainerStyles ;
283
287
var promise = $q . when ( true ) ;
284
288
var isLockedOpenParsed = $parse ( attr . mdIsLockedOpen ) ;
289
+ var isLockedClosedParsed = $parse ( attr . mdIsLockedClosed ) ;
285
290
var ngWindow = angular . element ( $window ) ;
286
- var isLocked = function ( ) {
291
+ var isLockedOpen = function ( ) {
287
292
return isLockedOpenParsed ( scope . $parent , {
288
293
$media : function ( arg ) {
289
294
$log . warn ( "$media is deprecated for is-locked-open. Use $mdMedia instead." ) ;
@@ -292,6 +297,15 @@ function SidenavDirective($mdMedia, $mdUtil, $mdConstant, $mdTheming, $mdInterac
292
297
$mdMedia : $mdMedia
293
298
} ) ;
294
299
} ;
300
+ var isLockedClosed = function ( ) {
301
+ return isLockedClosedParsed ( scope . $parent , {
302
+ $media : function ( arg ) {
303
+ $log . warn ( "$media is deprecated for is-locked-closed. Use $mdMedia instead." ) ;
304
+ return $mdMedia ( arg ) ;
305
+ } ,
306
+ $mdMedia : $mdMedia
307
+ } ) ;
308
+ } ;
295
309
296
310
if ( attr . mdDisableScrollTarget ) {
297
311
disableScrollTarget = $document [ 0 ] . querySelector ( attr . mdDisableScrollTarget ) ;
@@ -336,7 +350,8 @@ function SidenavDirective($mdMedia, $mdUtil, $mdConstant, $mdTheming, $mdInterac
336
350
backdrop && backdrop . remove ( ) ;
337
351
} ) ;
338
352
339
- scope . $watch ( isLocked , updateIsLocked ) ;
353
+ scope . $watch ( isLockedOpen , updateIsLockedOpen ) ;
354
+ scope . $watch ( isLockedClosed , updateIsLockedClosed ) ;
340
355
scope . $watch ( 'isOpen' , updateIsOpen ) ;
341
356
342
357
@@ -345,18 +360,30 @@ function SidenavDirective($mdMedia, $mdUtil, $mdConstant, $mdTheming, $mdInterac
345
360
346
361
/**
347
362
* Toggle the DOM classes to indicate `locked`
348
- * @param isLocked
363
+ * @param isLockedOpen
349
364
* @param oldValue
350
365
*/
351
- function updateIsLocked ( isLocked , oldValue ) {
352
- scope . isLockedOpen = isLocked ;
353
- if ( isLocked === oldValue ) {
354
- element . toggleClass ( 'md-locked-open' , ! ! isLocked ) ;
366
+ function updateIsLockedOpen ( isLockedOpen , oldValue ) {
367
+ scope . isLockedOpen = isLockedOpen ;
368
+ if ( isLockedOpen === oldValue ) {
369
+ element . toggleClass ( 'md-locked-open' , ! ! isLockedOpen ) ;
355
370
} else {
356
- $animate [ isLocked ? 'addClass' : 'removeClass' ] ( element , 'md-locked-open' ) ;
371
+ $animate [ isLockedOpen ? 'addClass' : 'removeClass' ] ( element , 'md-locked-open' ) ;
357
372
}
358
373
if ( backdrop ) {
359
- backdrop . toggleClass ( 'md-locked-open' , ! ! isLocked ) ;
374
+ backdrop . toggleClass ( 'md-locked-open' , ! ! isLockedOpen ) ;
375
+ }
376
+ }
377
+
378
+ /**
379
+ * Toggle the DOM classes to indicate `locked`
380
+ * @param isLockedClosed
381
+ * @param oldValue
382
+ */
383
+ function updateIsLockedClosed ( isLockedClosed , oldValue ) {
384
+ scope . isLockedClosed = isLockedClosed ;
385
+ if ( true === ! ! isLockedClosed ) {
386
+ sidenavCtrl . close ( ) ;
360
387
}
361
388
}
362
389
@@ -535,6 +562,7 @@ function SidenavController($scope, $attrs, $mdComponentRegistry, $q, $interpolat
535
562
// Synchronous getters
536
563
self . isOpen = function ( ) { return ! ! $scope . isOpen ; } ;
537
564
self . isLockedOpen = function ( ) { return ! ! $scope . isLockedOpen ; } ;
565
+ self . isLockedClosed = function ( ) { return ! ! $scope . isLockedClosed ; } ;
538
566
539
567
// Synchronous setters
540
568
self . onClose = function ( callback ) {
0 commit comments