From 33594adfa1fed7c94d967bf6d39a5ca257de2715 Mon Sep 17 00:00:00 2001 From: Denny Biasiolli Date: Sat, 14 Jan 2017 15:55:08 +0100 Subject: [PATCH 1/2] feat(sideMenuContent): adding close-menu-on-tap attribute --- js/angular/controller/sideMenuController.js | 8 ++++++++ js/angular/directive/sideMenuContent.js | 12 ++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/js/angular/controller/sideMenuController.js b/js/angular/controller/sideMenuController.js index 6a120259d..4297778f2 100644 --- a/js/angular/controller/sideMenuController.js +++ b/js/angular/controller/sideMenuController.js @@ -378,6 +378,14 @@ function($scope, $attrs, $ionicSideMenuDelegate, $ionicPlatform, $ionicBody, $io return self.edgeThresholdEnabled; }; + $scope.closeMenuOnTap = true; + self.closeMenuOnTap = function(closeMenu) { + if (arguments.length) { + $scope.closeMenuOnTap = !!closeMenu; + } + return $scope.closeMenuOnTap; + }; + self.isDraggableTarget = function(e) { //Only restrict edge when sidemenu is closed and restriction is enabled var shouldOnlyAllowEdgeDrag = self.edgeThresholdEnabled && !self.isOpen(); diff --git a/js/angular/directive/sideMenuContent.js b/js/angular/directive/sideMenuContent.js index f7827b58b..f10ffdfcc 100644 --- a/js/angular/directive/sideMenuContent.js +++ b/js/angular/directive/sideMenuContent.js @@ -13,7 +13,8 @@ * ```html * + * drag-content="true" + * close-menu-on-tap="true"> * * ``` * For a complete side menu example, see the @@ -24,6 +25,7 @@ * - If a non-zero number is given, that many pixels is used as the maximum allowed distance from the edge that starts dragging the side menu. * - If true is given, the default number of pixels (25) is used as the maximum allowed distance. * - If false or 0 is given, the edge drag threshold is disabled, and dragging from anywhere on the content is allowed. + * @param {boolean=} close-menu-on-tap Whether the content tap should close side menus. Default true. * */ IonicModule @@ -59,9 +61,15 @@ function($timeout, $ionicGesture, $window) { }); } + if (isDefined(attr.closeMenuOnTap)) { + $scope.$watch(attr.closeMenuOnTap, function(value) { + sideMenuCtrl.closeMenuOnTap(value); + }); + } + // Listen for taps on the content to close the menu function onContentTap(gestureEvt) { - if (sideMenuCtrl.getOpenAmount() !== 0) { + if (sideMenuCtrl.closeMenuOnTap() && sideMenuCtrl.getOpenAmount() !== 0) { sideMenuCtrl.close(); gestureEvt.gesture.srcEvent.preventDefault(); startCoord = null; From 38b421745f0a1987de97fbb018d5e8d2a9ffa673 Mon Sep 17 00:00:00 2001 From: Denny Biasiolli Date: Sat, 14 Jan 2017 15:55:49 +0100 Subject: [PATCH 2/2] tests(sideMenuContent): tests added for closeMenuOnTap flag --- test/unit/angular/directive/sideMenu.unit.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/unit/angular/directive/sideMenu.unit.js b/test/unit/angular/directive/sideMenu.unit.js index 5a0b9f5ad..0fadc36e8 100644 --- a/test/unit/angular/directive/sideMenu.unit.js +++ b/test/unit/angular/directive/sideMenu.unit.js @@ -219,6 +219,20 @@ describe('Ionic Angular Side Menu', function() { })); + it('should closeMenuOnTap', inject(function($compile, $rootScope) { + var el = $compile('
')($rootScope.$new()); + $rootScope.$apply(); + expect(el.controller('ionSideMenus').closeMenuOnTap()).toBe(true); + expect(el.scope().closeMenuOnTap).toBe(true); + + el.controller('ionSideMenus').closeMenuOnTap(false); + expect(el.controller('ionSideMenus').closeMenuOnTap()).toBe(false); + expect(el.scope().closeMenuOnTap).toBe(false); + + el.controller('ionSideMenus').closeMenuOnTap(true); + expect(el.controller('ionSideMenus').closeMenuOnTap()).toBe(true); + expect(el.scope().closeMenuOnTap).toBe(true); + })); }); describe('Ionic Side Menu Content Directive', function () {