From c012f54c89a284fb162fc612d1f93f087cd96be4 Mon Sep 17 00:00:00 2001 From: Tankred Hase Date: Tue, 2 Dec 2014 16:12:42 +0100 Subject: [PATCH] WIP: start new routing --- src/js/app.js | 23 +++++++++++++++++-- src/js/controller/app/mail-list.js | 15 +++++++++--- src/js/controller/app/navigation.js | 14 +++++++---- src/js/controller/login/login-existing.js | 2 +- src/js/controller/login/login-initial.js | 2 +- src/js/controller/login/login-new-device.js | 2 +- .../login/login-privatekey-download.js | 2 +- src/js/controller/login/login.js | 2 +- src/tpl/mail-list.html | 2 +- src/tpl/nav.html | 4 ++-- 10 files changed, 51 insertions(+), 17 deletions(-) diff --git a/src/js/app.js b/src/js/app.js index d54d92f..b519202 100644 --- a/src/js/app.js +++ b/src/js/app.js @@ -68,6 +68,11 @@ var app = angular.module('mail', [ // set router paths app.config(function($routeProvider, $animateProvider) { + + // + // Login routes + // + $routeProvider.when('/login', { templateUrl: 'tpl/login.html', controller: LoginCtrl @@ -104,10 +109,24 @@ app.config(function($routeProvider, $animateProvider) { templateUrl: 'tpl/login-privatekey-download.html', controller: LoginPrivateKeyDownloadCtrl }); - $routeProvider.when('/desktop', { + + // + // main app routes + // + + var accountRoute = { templateUrl: 'tpl/desktop.html', controller: NavigationCtrl - }); + }; + + $routeProvider.when('/account', accountRoute); + $routeProvider.when('/account/:folderIndex', accountRoute); + $routeProvider.when('/account/:folderIndex/:uid', accountRoute); + + // + // Default route + // + $routeProvider.otherwise({ redirectTo: '/login' }); diff --git a/src/js/controller/app/mail-list.js b/src/js/controller/app/mail-list.js index f0e949f..07de3ee 100644 --- a/src/js/controller/app/mail-list.js +++ b/src/js/controller/app/mail-list.js @@ -11,7 +11,7 @@ var INIT_DISPLAY_LEN = 20, FOLDER_TYPE_INBOX = 'Inbox', NOTIFICATION_INBOX_TIMEOUT = 5000; -var MailListCtrl = function($scope, $timeout, $routeParams, $filter, statusDisplay, notification, email, keychain, dialog, search, dummy) { +var MailListCtrl = function($scope, $timeout, $location, $routeParams, $filter, statusDisplay, notification, email, keychain, dialog, search, dummy) { // // Init @@ -50,6 +50,10 @@ var MailListCtrl = function($scope, $timeout, $routeParams, $filter, statusDispl }); }; + $scope.navigate = function(message) { + $location.path('/account/' + $routeParams.folderIndex + '/' + message.uid); + }; + /** * Called when clicking on an message list item */ @@ -98,6 +102,11 @@ var MailListCtrl = function($scope, $timeout, $routeParams, $filter, statusDispl } }; + var selectedMessage = _.findWhere(currentFolder().messages, { + uid: $routeParams.uid + }); + $scope.select(selectedMessage); + $scope.flag = function(message, flagged) { $scope.state.actionBar.flagMessage(message, flagged); }; @@ -155,7 +164,7 @@ var MailListCtrl = function($scope, $timeout, $routeParams, $filter, statusDispl // Shows the next message based on the uid of the currently selected element if (currentFolder().messages.indexOf(currentMessage()) === -1) { firstSelect = true; // reset first selection - $scope.select($scope.displayMessages[0]); + $scope.navigate($scope.displayMessages[0]); } }); @@ -301,7 +310,7 @@ var MailListCtrl = function($scope, $timeout, $routeParams, $filter, statusDispl } // mark message as read - $scope.select(_.findWhere(currentFolder().messages, { + $scope.navigate(_.findWhere(currentFolder().messages, { uid: unreadMsgs[0].uid })); }, diff --git a/src/js/controller/app/navigation.js b/src/js/controller/app/navigation.js index 5986b8c..218e419 100644 --- a/src/js/controller/app/navigation.js +++ b/src/js/controller/app/navigation.js @@ -17,9 +17,13 @@ var NavigationCtrl = function($scope, $routeParams, $location, account, email, o if (!$routeParams.dev && !account.isLoggedIn()) { $location.path('/'); // init app return; + } else if (!$routeParams.folderIndex) { + $location.path('/account/0'); // navigate to default account's inbox by default + return; } - var str = appConfig.string, + var folderIndex = $routeParams.folderIndex, + str = appConfig.string, config = appConfig.config; // @@ -77,10 +81,12 @@ var NavigationCtrl = function($scope, $routeParams, $location, account, email, o // init folders initializeFolders(); - // select inbox as the current folder on init - if ($scope.account.folders && $scope.account.folders.length > 0) { - $scope.openFolder($scope.account.folders[0]); + // select current folder on init + if ($scope.account.folders && $scope.account.folders.length > folderIndex) { + // navigate to the selected folder index + $scope.openFolder($scope.account.folders[folderIndex]); } + // connect imap/smtp clients on first startup account.onConnect(function(err) { if (err) { diff --git a/src/js/controller/login/login-existing.js b/src/js/controller/login/login-existing.js index 505f1d2..206dea4 100644 --- a/src/js/controller/login/login-existing.js +++ b/src/js/controller/login/login-existing.js @@ -43,7 +43,7 @@ var LoginExistingCtrl = function($scope, $location, $routeParams, email, auth, k return; } - $location.path('/desktop'); + $location.path('/account'); $scope.$apply(); }); } diff --git a/src/js/controller/login/login-initial.js b/src/js/controller/login/login-initial.js index 08408d6..9ac9e13 100644 --- a/src/js/controller/login/login-initial.js +++ b/src/js/controller/login/login-initial.js @@ -65,7 +65,7 @@ var LoginInitialCtrl = function($scope, $location, $routeParams, newsletter, ema return; } - $location.path('/desktop'); + $location.path('/account'); $scope.$apply(); }); }); diff --git a/src/js/controller/login/login-new-device.js b/src/js/controller/login/login-new-device.js index 44a3292..fe0de28 100644 --- a/src/js/controller/login/login-new-device.js +++ b/src/js/controller/login/login-new-device.js @@ -95,7 +95,7 @@ var LoginExistingCtrl = function($scope, $location, $routeParams, email, auth, p return; } - $location.path('/desktop'); + $location.path('/account'); $scope.$apply(); }); } diff --git a/src/js/controller/login/login-privatekey-download.js b/src/js/controller/login/login-privatekey-download.js index 5c3a58c..3ae1b32 100644 --- a/src/js/controller/login/login-privatekey-download.js +++ b/src/js/controller/login/login-privatekey-download.js @@ -100,7 +100,7 @@ var LoginPrivateKeyDownloadCtrl = function($scope, $location, $routeParams, auth return; } - $scope.goTo('/desktop'); + $scope.goTo('/account'); }); }); }); diff --git a/src/js/controller/login/login.js b/src/js/controller/login/login.js index 3d04571..7b4bc3a 100644 --- a/src/js/controller/login/login.js +++ b/src/js/controller/login/login.js @@ -60,7 +60,7 @@ var LoginCtrl = function($scope, $timeout, $location, updateHandler, account, au return dialog.error(err); } - $scope.goTo('/desktop'); + $scope.goTo('/account'); }); }); } else if (availableKeys && availableKeys.publicKey && !availableKeys.privateKey) { diff --git a/src/tpl/mail-list.html b/src/tpl/mail-list.html index 64016e1..e0c758e 100644 --- a/src/tpl/mail-list.html +++ b/src/tpl/mail-list.html @@ -27,7 +27,7 @@ infinite-scroll-distance="1" infinite-scroll-parent="true">