mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
Fixed #464 - side menu delegate
This commit is contained in:
41
dist/js/ionic-angular.js
vendored
41
dist/js/ionic-angular.js
vendored
@@ -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) {
|
||||
|
||||
4
dist/js/ionic-angular.min.js
vendored
4
dist/js/ionic-angular.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/js/ionic.js
vendored
2
dist/js/ionic.js
vendored
@@ -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;
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
2
dist/js/ionic.min.js
vendored
2
dist/js/ionic.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -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;
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
1
js/ext/angular/src/ionicAngular.js
vendored
1
js/ext/angular/src/ionicAngular.js
vendored
@@ -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', [
|
||||
|
||||
39
js/ext/angular/src/service/delegates/ionicSideMenuDelegate.js
vendored
Normal file
39
js/ext/angular/src/service/delegates/ionicSideMenuDelegate.js
vendored
Normal 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);
|
||||
}
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
})();
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user