mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
21
js/angular/controller/sideMenuController.js
vendored
21
js/angular/controller/sideMenuController.js
vendored
@@ -3,9 +3,13 @@ IonicModule
|
||||
'$scope',
|
||||
'$attrs',
|
||||
'$ionicSideMenuDelegate',
|
||||
function($scope, $attrs, $ionicSideMenuDelegate) {
|
||||
'$ionicPlatform',
|
||||
function($scope, $attrs, $ionicSideMenuDelegate, $ionicPlatform) {
|
||||
var self = this;
|
||||
angular.extend(this, ionic.controllers.SideMenuController.prototype);
|
||||
|
||||
this.$scope = $scope;
|
||||
|
||||
ionic.controllers.SideMenuController.call(this, {
|
||||
left: { width: 275 },
|
||||
right: { width: 275 }
|
||||
@@ -28,6 +32,21 @@ function($scope, $attrs, $ionicSideMenuDelegate) {
|
||||
|
||||
$scope.sideMenuContentTranslateX = 0;
|
||||
|
||||
|
||||
var deregisterBackButtonAction = angular.noop;
|
||||
var closeSideMenu = angular.bind(this, this.close);
|
||||
$scope.$watch(function() {
|
||||
return self.getOpenAmount() !== 0;
|
||||
}, function(isOpen) {
|
||||
deregisterBackButtonAction();
|
||||
if (isOpen) {
|
||||
deregisterBackButtonAction = $ionicPlatform.registerBackButtonAction(
|
||||
closeSideMenu,
|
||||
PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
var deregisterInstance = $ionicSideMenuDelegate._registerInstance(
|
||||
this, $attrs.delegateHandle
|
||||
);
|
||||
|
||||
1
js/angular/service/platform.js
vendored
1
js/angular/service/platform.js
vendored
@@ -1,4 +1,5 @@
|
||||
var PLATFORM_BACK_BUTTON_PRIORITY_VIEW = 100;
|
||||
var PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU = 150;
|
||||
var PLATFORM_BACK_BUTTON_PRIORITY_ACTION_SHEET = 300;
|
||||
var PLATFORM_BACK_BUTTON_PRIORITY_POPUP = 400;
|
||||
var PLATFORM_BACK_BUTTON_PRIORITY_LOADING = 500;
|
||||
|
||||
37
test/unit/angular/controller/sideMenuController.unit.js
Normal file
37
test/unit/angular/controller/sideMenuController.unit.js
Normal file
@@ -0,0 +1,37 @@
|
||||
describe('$ionicSideMenus controller', function() {
|
||||
beforeEach(module('ionic'));
|
||||
|
||||
function setup(locals, props) {
|
||||
var ctrl;
|
||||
inject(function($controller, $rootScope) {
|
||||
var scope = $rootScope.$new();
|
||||
ctrl = $controller('$ionicSideMenus', angular.extend({
|
||||
$scope: scope,
|
||||
$attrs: {}
|
||||
}, locals || {}));
|
||||
angular.extend(ctrl, props || {});
|
||||
});
|
||||
return ctrl;
|
||||
}
|
||||
|
||||
it('should register with backButton on open and dereg on close', inject(function($ionicPlatform) {
|
||||
var openAmount = 0;
|
||||
var deregSpy = jasmine.createSpy('deregister');
|
||||
spyOn($ionicPlatform, 'registerBackButtonAction').andReturn(deregSpy);
|
||||
|
||||
var ctrl = setup();
|
||||
spyOn(ctrl, 'getOpenAmount').andCallFake(function() { return openAmount; });
|
||||
|
||||
expect($ionicPlatform.registerBackButtonAction).not.toHaveBeenCalled();
|
||||
openAmount = 1;
|
||||
ctrl.$scope.$apply();
|
||||
expect($ionicPlatform.registerBackButtonAction).toHaveBeenCalledWith(
|
||||
jasmine.any(Function),
|
||||
PLATFORM_BACK_BUTTON_PRIORITY_SIDE_MENU
|
||||
);
|
||||
expect(deregSpy).not.toHaveBeenCalled();
|
||||
openAmount = 0;
|
||||
ctrl.$scope.$apply();
|
||||
expect(deregSpy).toHaveBeenCalled();
|
||||
}));
|
||||
});
|
||||
Reference in New Issue
Block a user