diff --git a/dist/js/ionic-angular.js b/dist/js/ionic-angular.js index 586ff6f444..46b80e8367 100644 --- a/dist/js/ionic-angular.js +++ b/dist/js/ionic-angular.js @@ -25781,10 +25781,11 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) var defaultPrevented = false; - ionic.on('mousedown', function(e) { + var readDefaultPrevented = function(e) { // If the child element prevented the drag, don't drag defaultPrevented = e.defaultPrevented; - }); + } + ionic.on('mousedown', readDefaultPrevented); var dragFn = function(e) { if(defaultPrevented) { @@ -25830,6 +25831,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) $scope.$on('$destroy', function() { Gesture.off(dragGesture, 'drag', dragFn); Gesture.off(releaseGesture, 'release', dragReleaseFn); + ionic.off('mousedown', readDefaultPrevented); }); }; } @@ -25868,6 +25870,14 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) } $element.append(transclude($scope)); + + $scope.$on('$destroy', function () { + if (['left', 'right'].indexOf($scope.side) > -1) { + delete sideMenuCtrl[$scope.side].isEnabled; + delete sideMenuCtrl[$scope.side].pushDown; + delete sideMenuCtrl[$scope.side].bringUp; + } + }); }; } }; diff --git a/js/ext/angular/src/directive/ionicSideMenu.js b/js/ext/angular/src/directive/ionicSideMenu.js index 56bb3b22f6..9ee7c87899 100644 --- a/js/ext/angular/src/directive/ionicSideMenu.js +++ b/js/ext/angular/src/directive/ionicSideMenu.js @@ -58,10 +58,11 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) var defaultPrevented = false; - ionic.on('mousedown', function(e) { + var readDefaultPrevented = function(e) { // If the child element prevented the drag, don't drag defaultPrevented = e.defaultPrevented; - }); + } + ionic.on('mousedown', readDefaultPrevented); var dragFn = function(e) { if(defaultPrevented) { @@ -107,6 +108,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) $scope.$on('$destroy', function() { Gesture.off(dragGesture, 'drag', dragFn); Gesture.off(releaseGesture, 'release', dragReleaseFn); + ionic.off('mousedown', readDefaultPrevented); }); }; } @@ -145,6 +147,14 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) } $element.append(transclude($scope)); + + $scope.$on('$destroy', function () { + if (['left', 'right'].indexOf($scope.side) > -1) { + delete sideMenuCtrl[$scope.side].isEnabled; + delete sideMenuCtrl[$scope.side].pushDown; + delete sideMenuCtrl[$scope.side].bringUp; + } + }); }; } }; diff --git a/js/ext/angular/test/directive/ionicSideMenu.unit.js b/js/ext/angular/test/directive/ionicSideMenu.unit.js index 633f1c76a3..8c26b58656 100644 --- a/js/ext/angular/test/directive/ionicSideMenu.unit.js +++ b/js/ext/angular/test/directive/ionicSideMenu.unit.js @@ -16,3 +16,74 @@ describe('Ionic Angular Side Menu', function() { expect(scope.sideMenuController).not.toBe(undefined); }); }); + +describe('Ionic Side Menu Content Directive', function () { + var $compile, element, scope, sideMenusCtrl; + + beforeEach(module('ionic.ui.sideMenu')); + + beforeEach(inject(function (_$compile_, _$rootScope_) { + $compile = _$compile_; + scope = _$rootScope_; + + var sideMenus = $compile('')(scope).appendTo('body'); + + sideMenuCtrl = sideMenus.controller('sideMenus'); + spyOn(sideMenuCtrl, '_handleDrag'); + + element = angular.element('
').appendTo(sideMenus); + + $compile(element)(scope); + scope.$digest(); + })); + + it('Should handle drag', function () { + ionic.trigger('drag', {target: element[0]}); + + expect(sideMenuCtrl._handleDrag).toHaveBeenCalled(); + }); + + it('Should not handle drag when prevented', function () { + var event = new CustomEvent('mousedown', {bubbles: true, cancelable: true}); + event.preventDefault(); + element[0].dispatchEvent(event); + + ionic.trigger('drag', {target: element[0]}); + + expect(sideMenuCtrl._handleDrag).not.toHaveBeenCalled(); + }); +}); + +describe('Ionic Side Menu Directive', function () { + var element, scope, sideMenuCtrl; + + beforeEach(module('ionic.ui.sideMenu')); + + beforeEach(inject(function (_$compile_, _$rootScope_) { + var $compile = _$compile_; + var $rootScope = _$rootScope_; + + var sideMenus = $compile('')($rootScope); + + sideMenuCtrl = sideMenus.controller('sideMenus'); + + element = angular.element('').appendTo(sideMenus); + $compile(element)($rootScope); + + scope = element.scope(); + scope.$digest(); + })); + + it('Should set attributes on the controller', function () { + expect(sideMenuCtrl.left.isEnabled).not.toBe(undefined); + expect(sideMenuCtrl.left.pushDown).not.toBe(undefined); + expect(sideMenuCtrl.left.bringUp).not.toBe(undefined); + }); + + it('Should remove the attributes it sets on the controller', function () { + scope.$destroy(); + expect(sideMenuCtrl.left.isEnabled).toBe(undefined); + expect(sideMenuCtrl.left.pushDown).toBe(undefined); + expect(sideMenuCtrl.left.bringUp).toBe(undefined); + }); +});