diff --git a/dist/js/ionic-angular.js b/dist/js/ionic-angular.js index 160ba25c36..0da028ed13 100644 --- a/dist/js/ionic-angular.js +++ b/dist/js/ionic-angular.js @@ -1759,10 +1759,11 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) var defaultPrevented = false; var isDragging = 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); // Listen for taps on the content to close the menu /* @@ -1835,6 +1836,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) Gesture.off(dragUpGesture, 'dragup', dragFn); Gesture.off(dragDownGesture, 'dragdown', dragFn); Gesture.off(releaseGesture, 'release', dragReleaseFn); + ionic.off('mousedown', readDefaultPrevented); }); }; } diff --git a/js/ext/angular/src/directive/ionicSideMenu.js b/js/ext/angular/src/directive/ionicSideMenu.js index 800eb42dda..e5bba6494a 100644 --- a/js/ext/angular/src/directive/ionicSideMenu.js +++ b/js/ext/angular/src/directive/ionicSideMenu.js @@ -60,10 +60,11 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) var defaultPrevented = false; var isDragging = 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); // Listen for taps on the content to close the menu /* @@ -136,6 +137,7 @@ angular.module('ionic.ui.sideMenu', ['ionic.service.gesture']) Gesture.off(dragUpGesture, 'dragup', dragFn); Gesture.off(dragDownGesture, 'dragdown', dragFn); Gesture.off(releaseGesture, 'release', dragReleaseFn); + ionic.off('mousedown', readDefaultPrevented); }); }; } diff --git a/js/ext/angular/test/directive/ionicSideMenu.unit.js b/js/ext/angular/test/directive/ionicSideMenu.unit.js index 633f1c76a3..174efb4841 100644 --- a/js/ext/angular/test/directive/ionicSideMenu.unit.js +++ b/js/ext/angular/test/directive/ionicSideMenu.unit.js @@ -16,3 +16,67 @@ 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); + }); +});