143 lines
5.6 KiB
JavaScript
143 lines
5.6 KiB
JavaScript
// Controller of menu toggle.
|
||
// Learn more about Sidenav directive of angular material
|
||
// https://material.angularjs.org/latest/#/demo/material.components.sidenav
|
||
appControllers.controller('menuCtrl', function ($scope, $timeout, $mdUtil, $mdSidenav, $log, $ionicHistory, $state, $ionicPlatform, $mdDialog, $mdBottomSheet, $mdMenu, $mdSelect) {
|
||
|
||
$scope.toggleLeft = buildToggler('left');
|
||
|
||
// buildToggler is for create menu toggle.
|
||
// Parameter :
|
||
// navID = id of navigation bar.
|
||
function buildToggler(navID) {
|
||
var debounceFn = $mdUtil.debounce(function () {
|
||
$mdSidenav(navID).toggle();
|
||
}, 0);
|
||
return debounceFn;
|
||
};// End buildToggler.
|
||
|
||
// navigateTo is for navigate to other page
|
||
// by using targetPage to be the destination state.
|
||
// Parameter :
|
||
// stateNames = target state to go
|
||
$scope.navigateTo = function (stateName) {
|
||
$timeout(function () {
|
||
$mdSidenav('left').close();
|
||
if ($ionicHistory.currentStateName() != stateName) {
|
||
$ionicHistory.nextViewOptions({
|
||
disableAnimate: true,
|
||
disableBack: true
|
||
});
|
||
$state.go(stateName);
|
||
}
|
||
}, ($scope.isAndroid == false ? 300 : 0));
|
||
};// End navigateTo.
|
||
|
||
//closeSideNav is for close side navigation
|
||
//It will use with event on-swipe-left="closeSideNav()" on-drag-left="closeSideNav()"
|
||
//When user swipe or drag md-sidenav to left side
|
||
$scope.closeSideNav = function(){
|
||
$mdSidenav('left').close();
|
||
};
|
||
//End closeSideNav
|
||
|
||
// $ionicPlatform.registerBackButtonAction(callback, priority, [actionId])
|
||
//
|
||
// Register a hardware back button action. Only one action will execute
|
||
// when the back button is clicked, so this method decides which of
|
||
// the registered back button actions has the highest priority.
|
||
//
|
||
// For example, if an actionsheet is showing, the back button should
|
||
// close the actionsheet, but it should not also go back a page view
|
||
// or close a modal which may be open.
|
||
//
|
||
// The priorities for the existing back button hooks are as follows:
|
||
// Return to previous view = 100
|
||
// Close side menu = 150
|
||
// Dismiss modal = 200
|
||
// Close action sheet = 300
|
||
// Dismiss popup = 400
|
||
// Dismiss loading overlay = 500
|
||
//
|
||
// Your back button action will override each of the above actions
|
||
// whose priority is less than the priority you provide. For example,
|
||
// an action assigned a priority of 101 will override the ‘return to
|
||
// previous view’ action, but not any of the other actions.
|
||
//
|
||
// Learn more at : http://ionicframework.com/docs/api/service/$ionicPlatform/#registerBackButtonAction
|
||
|
||
$ionicPlatform.registerBackButtonAction(function(){
|
||
|
||
if($mdSidenav("left").isOpen()){
|
||
//If side navigation is open it will close and then return
|
||
$mdSidenav('left').close();
|
||
}
|
||
else if(jQuery('md-bottom-sheet').length > 0 ) {
|
||
//If bottom sheet is open it will close and then return
|
||
$mdBottomSheet.cancel();
|
||
}
|
||
else if(jQuery('[id^=dialog]').length > 0 ){
|
||
//If popup dialog is open it will close and then return
|
||
$mdDialog.cancel();
|
||
}
|
||
else if(jQuery('md-menu-content').length > 0 ){
|
||
//If md-menu is open it will close and then return
|
||
$mdMenu.hide();
|
||
}
|
||
else if(jQuery('md-select-menu').length > 0 ){
|
||
//If md-select is open it will close and then return
|
||
$mdSelect.hide();
|
||
}
|
||
|
||
else{
|
||
|
||
// If control :
|
||
// side navigation,
|
||
// bottom sheet,
|
||
// popup dialog,
|
||
// md-menu,
|
||
// md-select
|
||
// is not opening, It will show $mdDialog to ask for
|
||
// Confirmation to close the application or go to the view of lasted state.
|
||
|
||
// Check for the current state that not have previous state.
|
||
// It will show $mdDialog to ask for Confirmation to close the application.
|
||
|
||
if($ionicHistory.backView() == null){
|
||
|
||
//Check is popup dialog is not open.
|
||
if(jQuery('[id^=dialog]').length == 0 ) {
|
||
|
||
// mdDialog for show $mdDialog to ask for
|
||
// Confirmation to close the application.
|
||
|
||
$mdDialog.show({
|
||
controller: 'DialogController',
|
||
templateUrl: 'confirm-dialog.html',
|
||
targetEvent: null,
|
||
locals: {
|
||
displayOption: {
|
||
title: "App beenden?",
|
||
content: "Möchten Sie PokedexHelper wirklich beenden?",
|
||
ok: "Ja",
|
||
cancel: "Nein"
|
||
}
|
||
}
|
||
}).then(function () {
|
||
//If user tap Confirm at the popup dialog.
|
||
//Application will close.
|
||
ionic.Platform.exitApp();
|
||
}, function () {
|
||
// For cancel button actions.
|
||
}); //End mdDialog
|
||
}
|
||
}
|
||
else{
|
||
//Go to the view of lasted state.
|
||
$ionicHistory.goBack();
|
||
}
|
||
}
|
||
|
||
},100);
|
||
//End of $ionicPlatform.registerBackButtonAction
|
||
|
||
}); // End of menu toggle controller.
|