sogo/UI/WebServerResources/js/mobile/MailerUI.js
Francis Lachapelle 3aec2828b4 Improve JavaScript of Mail module
- activated file uploader of mail editor
- renamed method $update to $reload
- automatically mark messages as read
- use ui-sref-active from ui-router instead of ng-class
2015-06-11 15:42:34 -04:00

179 lines
6.1 KiB
JavaScript

/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* JavaScript for SOGo.Mailer (mobile) */
(function() {
'use strict';
angular.module('SOGo.Common', []);
angular.module('SOGo.MailerUI', ['ionic', 'SOGo.Common', 'SOGo.UICommon', 'SOGo.UIMobile'])
.constant('sgSettings', {
baseURL: ApplicationBaseURL
})
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if (window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
});
})
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'menu.html',
controller: 'AppCtrl'
})
.state('app.mail', {
url: '/mail',
views: {
menuContent: {
templateUrl: 'mailboxes.html',
controller: 'MailboxesCtrl',
}
},
resolve: {
stateAccounts: ['$q', 'sgAccount', function($q, Account) {
var accounts = Account.$findAll(mailAccounts);
var promises = [];
// Resolve mailboxes of each account
angular.forEach(accounts, function(account, i) {
var mailboxes = account.$getMailboxes();
promises.push(mailboxes.then(function(objects) {
return account;
}));
});
return $q.all(promises);
}]
}
})
.state('app.mail.account', {
url: '/:accountId',
abstract: true,
resolve: {
stateAccount: ['$stateParams', 'stateAccounts', function($stateParams, stateAccounts) {
return _.find(stateAccounts, function(account) {
return account.id == $stateParams.accountId;
});
}]
}
})
.state('app.mail.account.mailbox', {
url: '/:mailboxId',
views: {
'menuContent@app': {
templateUrl: 'mailbox.html',
controller: 'MailboxCtrl'
}
},
resolve: {
stateMailbox: ['$stateParams', 'stateAccount', 'decodeUriFilter', function($stateParams, stateAccount, decodeUriFilter) {
var mailboxId = decodeUriFilter($stateParams.mailboxId);
// Recursive find function
var _find = function(mailboxes) {
var mailbox = _.find(mailboxes, function(o) {
return o.path == mailboxId;
});
if (!mailbox) {
angular.forEach(mailboxes, function(o) {
if (!mailbox && o.children && o.children.length > 0) {
mailbox = _find(o.children);
}
});
}
return mailbox;
};
return _find(stateAccount.$mailboxes);
}],
stateMessages: ['stateMailbox', function(stateMailbox) {
return stateMailbox.$reload();
}]
}
})
.state('app.mail.account.mailbox.message', {
url: "/:messageId",
views: {
'menuContent@app': {
templateUrl: "message.html",
controller: 'MessageCtrl'
}
},
resolve: {
stateMessage: ['$stateParams', 'stateMailbox', 'stateMessages', function($stateParams, stateMailbox, stateMessages) {
var message = _.find(stateMessages, function(messageObject) {
return messageObject.uid == $stateParams.messageId;
});
return message;
}]
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/app/mail');
})
.controller('AppCtrl', ['$scope', '$http', function($scope, $http) {
$scope.UserLogin = UserLogin;
$scope.UserFolderURL = UserFolderURL;
$scope.ApplicationBaseURL = ApplicationBaseURL;
}])
.controller('MailboxesCtrl', ['$scope', '$http', '$state', '$ionicActionSheet', '$ionicListDelegate', 'sgAccount', 'sgMailbox', 'encodeUriFilter', 'stateAccounts', function($scope, $http, $state, $ionicActionSheet, $ionicListDelegate, Account, Mailbox, encodeUriFilter, stateAccounts) {
$scope.accounts = stateAccounts
$scope.setCurrentFolder = function(account, folder) {
$state.go('app.mail.account.mailbox', { accountId: account.id, mailboxId: encodeUriFilter(folder.path) });
};
$scope.edit = function(folder) {
$ionicActionSheet.show({
buttons: [
{ text: l('Rename') },
{ text: l('Set Access Rights') }
],
destructiveText: l('Delete'),
cancelText: l('Cancel'),
buttonClicked: function(index) {
// TODO
return true;
},
destructiveButtonClicked: function() {
// Delete mailbox
folder.$delete()
.then(function() {
folder = null;
}, function(data) {
Dialog.alert(l('An error occured while deleting the mailbox "%{0}".',
folder.name),
l(data.error));
});
return true;
}
// cancel: function() {
// },
});
$ionicListDelegate.closeOptionButtons();
};
}])
.controller('MailboxCtrl', ['$scope', 'stateAccount', 'stateMailbox', function($scope, stateAccount, stateMailbox) {
$scope.account = stateAccount;
$scope.mailbox = stateMailbox;
}])
.controller('MessageCtrl', ['$scope', '$stateParams', 'stateMessage', function($scope, $stateParams, stateMessage) {
$scope.message = stateMessage;
}]);
})();