1
0
mirror of https://github.com/moparisthebest/mail synced 2024-11-26 02:42:17 -05:00

WIP: start new routing

This commit is contained in:
Tankred Hase 2014-12-02 16:12:42 +01:00
parent e06fff4385
commit c012f54c89
10 changed files with 51 additions and 17 deletions

View File

@ -68,6 +68,11 @@ var app = angular.module('mail', [
// set router paths // set router paths
app.config(function($routeProvider, $animateProvider) { app.config(function($routeProvider, $animateProvider) {
//
// Login routes
//
$routeProvider.when('/login', { $routeProvider.when('/login', {
templateUrl: 'tpl/login.html', templateUrl: 'tpl/login.html',
controller: LoginCtrl controller: LoginCtrl
@ -104,10 +109,24 @@ app.config(function($routeProvider, $animateProvider) {
templateUrl: 'tpl/login-privatekey-download.html', templateUrl: 'tpl/login-privatekey-download.html',
controller: LoginPrivateKeyDownloadCtrl controller: LoginPrivateKeyDownloadCtrl
}); });
$routeProvider.when('/desktop', {
//
// main app routes
//
var accountRoute = {
templateUrl: 'tpl/desktop.html', templateUrl: 'tpl/desktop.html',
controller: NavigationCtrl controller: NavigationCtrl
}); };
$routeProvider.when('/account', accountRoute);
$routeProvider.when('/account/:folderIndex', accountRoute);
$routeProvider.when('/account/:folderIndex/:uid', accountRoute);
//
// Default route
//
$routeProvider.otherwise({ $routeProvider.otherwise({
redirectTo: '/login' redirectTo: '/login'
}); });

View File

@ -11,7 +11,7 @@ var INIT_DISPLAY_LEN = 20,
FOLDER_TYPE_INBOX = 'Inbox', FOLDER_TYPE_INBOX = 'Inbox',
NOTIFICATION_INBOX_TIMEOUT = 5000; 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 // 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 * 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.flag = function(message, flagged) {
$scope.state.actionBar.flagMessage(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 // Shows the next message based on the uid of the currently selected element
if (currentFolder().messages.indexOf(currentMessage()) === -1) { if (currentFolder().messages.indexOf(currentMessage()) === -1) {
firstSelect = true; // reset first selection 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 // mark message as read
$scope.select(_.findWhere(currentFolder().messages, { $scope.navigate(_.findWhere(currentFolder().messages, {
uid: unreadMsgs[0].uid uid: unreadMsgs[0].uid
})); }));
}, },

View File

@ -17,9 +17,13 @@ var NavigationCtrl = function($scope, $routeParams, $location, account, email, o
if (!$routeParams.dev && !account.isLoggedIn()) { if (!$routeParams.dev && !account.isLoggedIn()) {
$location.path('/'); // init app $location.path('/'); // init app
return; 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; config = appConfig.config;
// //
@ -77,10 +81,12 @@ var NavigationCtrl = function($scope, $routeParams, $location, account, email, o
// init folders // init folders
initializeFolders(); initializeFolders();
// select inbox as the current folder on init // select current folder on init
if ($scope.account.folders && $scope.account.folders.length > 0) { if ($scope.account.folders && $scope.account.folders.length > folderIndex) {
$scope.openFolder($scope.account.folders[0]); // navigate to the selected folder index
$scope.openFolder($scope.account.folders[folderIndex]);
} }
// connect imap/smtp clients on first startup // connect imap/smtp clients on first startup
account.onConnect(function(err) { account.onConnect(function(err) {
if (err) { if (err) {

View File

@ -43,7 +43,7 @@ var LoginExistingCtrl = function($scope, $location, $routeParams, email, auth, k
return; return;
} }
$location.path('/desktop'); $location.path('/account');
$scope.$apply(); $scope.$apply();
}); });
} }

View File

@ -65,7 +65,7 @@ var LoginInitialCtrl = function($scope, $location, $routeParams, newsletter, ema
return; return;
} }
$location.path('/desktop'); $location.path('/account');
$scope.$apply(); $scope.$apply();
}); });
}); });

View File

@ -95,7 +95,7 @@ var LoginExistingCtrl = function($scope, $location, $routeParams, email, auth, p
return; return;
} }
$location.path('/desktop'); $location.path('/account');
$scope.$apply(); $scope.$apply();
}); });
} }

View File

@ -100,7 +100,7 @@ var LoginPrivateKeyDownloadCtrl = function($scope, $location, $routeParams, auth
return; return;
} }
$scope.goTo('/desktop'); $scope.goTo('/account');
}); });
}); });
}); });

View File

@ -60,7 +60,7 @@ var LoginCtrl = function($scope, $timeout, $location, updateHandler, account, au
return dialog.error(err); return dialog.error(err);
} }
$scope.goTo('/desktop'); $scope.goTo('/account');
}); });
}); });
} else if (availableKeys && availableKeys.publicKey && !availableKeys.privateKey) { } else if (availableKeys && availableKeys.publicKey && !availableKeys.privateKey) {

View File

@ -27,7 +27,7 @@
infinite-scroll-distance="1" infinite-scroll-parent="true"> infinite-scroll-distance="1" infinite-scroll-parent="true">
<li class="mail-list-entry" <li class="mail-list-entry"
ng-class="{'mail-list-entry--active': email === state.mailList.selected, 'mail-list-entry--unread': email.unread, 'mail-list-entry--attachment': email.attachments !== undefined && email.attachments.length > 0}" ng-class="{'mail-list-entry--active': email === state.mailList.selected, 'mail-list-entry--unread': email.unread, 'mail-list-entry--attachment': email.attachments !== undefined && email.attachments.length > 0}"
wo-touch="select(email)" wo-touch="navigate(email)"
ng-repeat="email in displayMessages"> ng-repeat="email in displayMessages">
<ul class="mail-list-entry__flags"> <ul class="mail-list-entry__flags">
<li class="mail-list-entry__flags-unread"></li> <li class="mail-list-entry__flags-unread"></li>

View File

@ -7,7 +7,7 @@
<ul class="nav__folders"> <ul class="nav__folders">
<li ng-repeat="folder in account.folders" ng-if="folder.wellknown" ng-hide="folder.type === 'Outbox' && folder.count < 1" <li ng-repeat="folder in account.folders" ng-if="folder.wellknown" ng-hide="folder.type === 'Outbox' && folder.count < 1"
class="nav__folder" ng-class="{'nav__folder--open': state.nav.currentFolder === folder}"> class="nav__folder" ng-class="{'nav__folder--open': state.nav.currentFolder === folder}">
<a href="#" wo-touch="$event.preventDefault(); openFolder(folder)"> <a href="#/account/{{$index}}">
<svg ng-if="folder.type === 'Inbox'" role="presentation"> <svg ng-if="folder.type === 'Inbox'" role="presentation">
<use xlink:href="#icon-inbox" /> <use xlink:href="#icon-inbox" />
</svg> </svg>
@ -38,7 +38,7 @@
<ul class="nav__folders"> <ul class="nav__folders">
<li ng-repeat="folder in account.folders" ng-if="!folder.wellknown" <li ng-repeat="folder in account.folders" ng-if="!folder.wellknown"
class="nav__folder" ng-class="{'nav__folder--open': state.nav.currentFolder === folder}"> class="nav__folder" ng-class="{'nav__folder--open': state.nav.currentFolder === folder}">
<a href="#" wo-touch="$event.preventDefault(); openFolder(folder)"> <a href="#/account/{{$index}}">
<svg role="presentation"><use xlink:href="#icon-folder" /></svg> <svg role="presentation"><use xlink:href="#icon-folder" /></svg>
{{folder.name}} {{folder.name}}
<span ng-show="folder.count > 0" class="nav__counter">{{folder.count}}</span> <span ng-show="folder.count > 0" class="nav__counter">{{folder.count}}</span>