From 29d6dc8163fe744f361e2d0e357bfeea43865a16 Mon Sep 17 00:00:00 2001 From: Perry Govier Date: Fri, 3 Oct 2014 11:27:26 -0500 Subject: [PATCH] fix(sideMenu): allow expose-aside-when on the right side. Closes #2207 --- js/angular/controller/sideMenuController.js | 14 ++++++++------ js/angular/directive/sideMenuContent.js | 12 ++++++++++++ .../angular/controller/sideMenuController.unit.js | 2 ++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/js/angular/controller/sideMenuController.js b/js/angular/controller/sideMenuController.js index 46e8014492..2ff3090287 100644 --- a/js/angular/controller/sideMenuController.js +++ b/js/angular/controller/sideMenuController.js @@ -259,14 +259,16 @@ function($scope, $attrs, $ionicSideMenuDelegate, $ionicPlatform, $ionicBody) { }; self.exposeAside = function(shouldExposeAside) { - if(!self.left || !self.left.isEnabled) return; - + if(!(self.left && self.left.isEnabled) && !(self.right && self.right.isEnabled))return; self.close(); isAsideExposed = shouldExposeAside; - - // set the left marget width if it should be exposed - // otherwise set false so there's no left margin - self.content.setMarginLeft( isAsideExposed ? self.left.width : 0 ); + if(self.left && self.left.isEnabled){ + // set the left marget width if it should be exposed + // otherwise set false so there's no left margin + self.content.setMarginLeft( isAsideExposed ? self.left.width : 0 ); + }else if(self.right && self.right.isEnabled){ + self.content.setMarginRight( isAsideExposed ? self.right.width : 0 ); + } self.$scope.$emit('$ionicExposeAside', isAsideExposed); }; diff --git a/js/angular/directive/sideMenuContent.js b/js/angular/directive/sideMenuContent.js index 73c0cebbd2..13ed207124 100644 --- a/js/angular/directive/sideMenuContent.js +++ b/js/angular/directive/sideMenuContent.js @@ -155,6 +155,18 @@ function($timeout, $ionicGesture, $window) { content.offsetX = 0; } }), + setMarginRight: ionic.animationFrameThrottle(function(amount) { + if(amount) { + amount = parseInt(amount, 10); + $element[0].style.width = ($window.innerWidth - amount) + 'px'; + content.offsetX = amount; + } else { + $element[0].style.width = ''; + content.offsetX = 0; + } + // reset incase left gets grabby + $element[0].style[ionic.CSS.TRANSFORM] = 'translate3d(0,0,0)'; + }), enableAnimation: function() { $scope.animationEnabled = true; $element[0].classList.add('menu-animated'); diff --git a/test/unit/angular/controller/sideMenuController.unit.js b/test/unit/angular/controller/sideMenuController.unit.js index 6972704a0f..7104b717e8 100644 --- a/test/unit/angular/controller/sideMenuController.unit.js +++ b/test/unit/angular/controller/sideMenuController.unit.js @@ -49,6 +49,7 @@ describe('$ionicSideMenus controller', function() { }); var content = new Controller({ el: document.createElement('div') }); content.setMarginLeft = function(){}; + content.setMarginRight = function(){}; ctrl.setContent(content); }); @@ -157,6 +158,7 @@ describe('$ionicSideMenus controller', function() { it('should set enabled/disabled exposeAside', function() { expect(ctrl.isAsideExposed()).toEqual(false); ctrl.left.setIsEnabled(false); + ctrl.right.setIsEnabled(false); ctrl.exposeAside(true); expect(ctrl.isAsideExposed()).toEqual(false); ctrl.left.setIsEnabled(true);