diff --git a/UI/Templates/MailerUI/UIxMailMainFrame.wox b/UI/Templates/MailerUI/UIxMailMainFrame.wox index a83778aa8..85d01a2a7 100644 --- a/UI/Templates/MailerUI/UIxMailMainFrame.wox +++ b/UI/Templates/MailerUI/UIxMailMainFrame.wox @@ -253,7 +253,14 @@ ng-dblclick="app.editFolder(folder)" ui-sref="mail.account.mailbox({accountId: account.id, mailboxId: (folder.path | encodeUri)})" ui-sref-active="md-default-theme md-background md-bg md-hue-1"> - {{app.metadataForFolder(folder).icon}} +
+ {{app.metadataForFolder(folder).icon}} + +

{{app.metadataForFolder(folder).name}} diff --git a/UI/WebServerResources/js/Mailer/Account.service.js b/UI/WebServerResources/js/Mailer/Account.service.js index 8259fde75..e2c003170 100644 --- a/UI/WebServerResources/js/Mailer/Account.service.js +++ b/UI/WebServerResources/js/Mailer/Account.service.js @@ -31,12 +31,13 @@ * @desc The factory we'll use to register with Angular * @returns the Account constructor */ - Account.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Mailbox', 'Message', function($q, $timeout, $log, Settings, Resource, Mailbox, Message) { + Account.$factory = ['$q', '$timeout', '$log', 'sgSettings', 'Resource', 'Preferences', 'Mailbox', 'Message', function($q, $timeout, $log, Settings, Resource, Preferences, Mailbox, Message) { angular.extend(Account, { $q: $q, $timeout: $timeout, $log: $log, $$resource: new Resource(Settings.activeUser('folderURL') + 'Mail', Settings.activeUser()), + $Preferences: Preferences, $Mailbox: Mailbox, $Message: Message }); @@ -104,7 +105,25 @@ else { return Account.$Mailbox.$find(this).then(function(data) { _this.$mailboxes = data; - _this.$flattenMailboxes({reload: true}); + + // Set expanded folders from user's settings + Account.$Preferences.ready().then(function() { + var expandedFolders; + if (Account.$Preferences.settings.Mail.ExpandedFolders) { + if (angular.isString(Account.$Preferences.settings.Mail.ExpandedFolders)) + // Backward compatibility support + expandedFolders = angular.fromJson(Account.$Preferences.settings.Mail.ExpandedFolders); + else + expandedFolders = Account.$Preferences.settings.Mail.ExpandedFolders; + if (expandedFolders.length > 0) { + _.forEach(_this.$mailboxes, function(mailbox) { + mailbox.$expanded = (expandedFolders.indexOf('/' + mailbox.id) >= 0); + }); + } + } + _this.$flattenMailboxes({reload: true}); + }); + return _this.$mailboxes; }); } @@ -120,10 +139,11 @@ Account.prototype.$flattenMailboxes = function(options) { var _this = this, allMailboxes = [], + expandedMailboxes = [], _visit = function(mailboxes) { _.each(mailboxes, function(o) { allMailboxes.push(o); - if (o.children && o.children.length > 0) { + if (o.$expanded && o.children && o.children.length > 0) { _visit(o.children); } }); @@ -135,6 +155,15 @@ else { _visit(this.$mailboxes); _this.$$flattenMailboxes = allMailboxes; + if (options && options.saveState) { + _.reduce(allMailboxes, function(expandedFolders, mailbox) { + if (mailbox.$expanded) { + expandedFolders.push('/' + mailbox.id); + } + return expandedFolders; + }, expandedMailboxes); + Account.$$resource.post(null, 'saveFoldersState', expandedMailboxes); + } } return allMailboxes; diff --git a/UI/WebServerResources/js/Mailer/MailboxesController.js b/UI/WebServerResources/js/Mailer/MailboxesController.js index 8b78f247e..5b9a81151 100644 --- a/UI/WebServerResources/js/Mailer/MailboxesController.js +++ b/UI/WebServerResources/js/Mailer/MailboxesController.js @@ -301,7 +301,7 @@ //if ($rootScope.currentFolder == folder) // return 'folder_open'; - return {name: folder.name, icon: 'folder'}; + return {name: folder.name, icon: 'folder_open'}; } function setFolderAs(folder, type) { diff --git a/UI/WebServerResources/scss/components/sidenav/sidenav.scss b/UI/WebServerResources/scss/components/sidenav/sidenav.scss index c343c57f8..201506e5c 100644 --- a/UI/WebServerResources/scss/components/sidenav/sidenav.scss +++ b/UI/WebServerResources/scss/components/sidenav/sidenav.scss @@ -23,6 +23,13 @@ $i: 1; $i: $i + 1; } +[class^=sg-child-level] { + md-icon, md-checkbox { + margin-right: $bl * 2; + max-width: 24px; + } +} + // This hack is so BAD I am ashame putting it in the shame file // ----------------------------------------------------------- // Folder tree's controler function are very intricate, the way diff --git a/UI/WebServerResources/scss/views/MailerUI.scss b/UI/WebServerResources/scss/views/MailerUI.scss index edb83f1f2..c60a009c0 100644 --- a/UI/WebServerResources/scss/views/MailerUI.scss +++ b/UI/WebServerResources/scss/views/MailerUI.scss @@ -45,6 +45,36 @@ // margin-bottom: ($mg/2); } +md-sidenav md-checkbox { + &.sg-folder { + // Show checkbox as a "closed" folder when unchecked and "opened" folder when checked + .md-container:after { + color: rgba(0,0,0,0.54); + font-family: 'Material Icons'; + font-size: 24px; + content: "\e2c7"; + top: -4px; + left: -2px; + width: 1em; + height: 1em; + } + .md-icon { + border-width: 0; + } + &.md-checked { + .md-container:after { + content: "\e2c8"; + } + .md-icon { + background-color: initial; + &:after { + border-style: none; + } + } + } + } +} + .msg-attachment-image { @media (min-width: $layout-breakpoint-sm) { flex: 0 0 100%;