Fixed #464 - side menu delegate

This commit is contained in:
Max Lynch
2014-01-23 12:55:40 -06:00
parent 5ded0a3708
commit 766f97d94b
9 changed files with 136 additions and 7 deletions

View File

@@ -30,6 +30,7 @@ angular.module('ionic.service', [
angular.module('ionic.ui.service', [
'ionic.ui.service.scrollDelegate',
'ionic.ui.service.slideBoxDelegate',
'ionic.ui.service.sideMenuDelegate',
]);
angular.module('ionic.ui', [
@@ -151,6 +152,46 @@ angular.module('ionic.ui.service.scrollDelegate', [])
(function() {
'use strict';
angular.module('ionic.ui.service.sideMenuDelegate', [])
.factory('$ionicSideMenuDelegate', ['$rootScope', '$timeout', '$q', function($rootScope, $timeout, $q) {
return {
getSideMenuController: function($scope) {
return $scope.sideMenuController;
},
close: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.close();
}
},
toggleLeft: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.toggleLeft();
}
},
toggleRight: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.toggleRight();
}
},
openLeft: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.openPercentage(100);
}
},
openRight: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.openPercentage(-100);
}
}
};
}]);
})();
;
(function() {
'use strict';
angular.module('ionic.ui.service.slideBoxDelegate', [])
.factory('$ionicSlideBoxDelegate', ['$rootScope', '$timeout', function($rootScope, $timeout) {

View File

File diff suppressed because one or more lines are too long

2
dist/js/ionic.js vendored
View File

@@ -6159,7 +6159,7 @@ ionic.controllers.NavController = ionic.controllers.ViewController.inherit({
* @return {float} The amount the side menu is open, either positive or negative for left (positive), or right (negative)
*/
getOpenAmount: function() {
return this.content.getTranslateX() || 0;
return this.content && this.content.getTranslateX() || 0;
},
/**

View File

File diff suppressed because one or more lines are too long

View File

@@ -86,7 +86,7 @@
* @return {float} The amount the side menu is open, either positive or negative for left (positive), or right (negative)
*/
getOpenAmount: function() {
return this.content.getTranslateX() || 0;
return this.content && this.content.getTranslateX() || 0;
},
/**

View File

@@ -17,6 +17,7 @@ angular.module('ionic.service', [
angular.module('ionic.ui.service', [
'ionic.ui.service.scrollDelegate',
'ionic.ui.service.slideBoxDelegate',
'ionic.ui.service.sideMenuDelegate',
]);
angular.module('ionic.ui', [

View File

@@ -0,0 +1,39 @@
(function() {
'use strict';
angular.module('ionic.ui.service.sideMenuDelegate', [])
.factory('$ionicSideMenuDelegate', ['$rootScope', '$timeout', '$q', function($rootScope, $timeout, $q) {
return {
getSideMenuController: function($scope) {
return $scope.sideMenuController;
},
close: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.close();
}
},
toggleLeft: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.toggleLeft();
}
},
toggleRight: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.toggleRight();
}
},
openLeft: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.openPercentage(100);
}
},
openRight: function($scope) {
if($scope.sideMenuController) {
$scope.sideMenuController.openPercentage(-100);
}
}
};
}]);
})();

View File

@@ -0,0 +1,48 @@
describe('Ionic SideMenuDelegate Service', function() {
var del, rootScope, compile, timeout, document;
beforeEach(module('ionic'));
beforeEach(inject(function($ionicSideMenuDelegate, $rootScope, $timeout, $compile, $document) {
del = $ionicSideMenuDelegate;
document = $document;
rootScope = $rootScope;
timeout = $timeout;
compile = $compile;
}));
it('Should get from scope', function() {
var scope = rootScope.$new();
var el = compile('<side-menus></side-menus>')(scope);
var sc = del.getSideMenuController(scope);
expect(sc).not.toBe(undefined);
});
xit('Should open and close', function() {
var scope = rootScope.$new();
var el = compile('<side-menus><div side-menu-content></div><side-menu side="left"></side-menu><side-menu side="right"></side-menu></side-menus>')(scope);
var sc = del.getSideMenuController(scope);
window.rAF = function( callback ){
window.setTimeout(callback, 1);
};
del.openLeft(scope);
timeout.flush();
expect(sc.isOpen()).toBe(true);
expect(sc.getOpenAmount()).toBe(100);
del.close(scope);
expect(sc.isOpen()).toBe(false);
expect(sc.getOpenAmount()).toBe(0);
del.openRight(scope);
expect(sc.isOpen()).toBe(true);
expect(sc.getOpenAmount()).toBe(-100);
del.close(scope);
expect(sc.isOpen()).toBe(false);
expect(sc.getOpenAmount()).toBe(0);
});
});

View File

@@ -57,7 +57,7 @@
<script>
angular.module('sideMenuTest', ['ionic'])
.controller('MenuCtrl', function($scope) {
.controller('MenuCtrl', function($scope, $ionicSideMenuDelegate) {
$scope.list = [];
for(var i = 0; i < 20; i++) {
$scope.list.push({
@@ -65,7 +65,7 @@
});
}
$scope.openLeft = function() {
$scope.sideMenuController.toggleLeft();
$ionicSideMenuDelegate.toggleLeft($scope);
};
});
</script>