Skip to content
This repository was archived by the owner on Jul 10, 2019. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions src/js/controller/app/action-bar.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,42 @@ var ActionBarCtrl = function($scope, $q, email, dialog, status) {
// scope functions
//

$scope.CHECKNONE = 0;
$scope.CHECKALL = 1;
$scope.CHECKUNREAD = 2;
$scope.CHECKREAD = 3;
$scope.CHECKFLAGGED = 4;
$scope.CHECKUNFLAGGED = 5;
$scope.CHECKENCRYPTED = 6;
$scope.CHECKUNENCRYPTED = 7;

$scope.check = function(option) {
currentFolder().messages.forEach(function(email) {
if (!email.from) {
// only mark loaded messages, not the dummy messages
return;
}

if (option === $scope.CHECKNONE) {
email.checked = false;
} else if (option === $scope.CHECKALL) {
email.checked = true;
} else if (option === $scope.CHECKUNREAD) {
email.checked = !!email.unread;
} else if (option === $scope.CHECKREAD) {
email.checked = !email.unread;
} else if (option === $scope.CHECKFLAGGED) {
email.checked = !!email.flagged;
} else if (option === $scope.CHECKUNFLAGGED) {
email.checked = !email.flagged;
} else if (option === $scope.CHECKENCRYPTED) {
email.checked = !!email.encrypted;
} else if (option === $scope.CHECKUNENCRYPTED) {
email.checked = !email.encrypted;
}
});
};

/**
* Move a single message from the currently selected folder to another folder
* @param {Object} message The message that is to be moved
Expand Down
15 changes: 15 additions & 0 deletions src/tpl/action-bar.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
<div class="action-bar" ng-controller="ActionBarCtrl">
<div class="action-bar__primary">
<button class="btn btn--light-dropdown" ng-hide="state.read.open" wo-dropdown="#dropdown-checkmessages">
<svg role="presentation"><use xlink:href="#icon-check" />Check messages</svg>
<svg class="btn__dropdown" role="presentation"><use xlink:href="#icon-dropdown" /></svg>
</button>
<button class="btn btn--light" wo-touch="state.read.open ? deleteMessage(state.mailList.selected) : deleteCheckedMessages()">Delete</button>
<button class="btn btn--light" wo-touch="state.read.open ? moveMessage(state.mailList.selected, getJunkFolder()) : moveCheckedMessages(getJunkFolder())">Spam</button>
<button class="btn btn--light-dropdown" wo-dropdown="#dropdown-folder">
Expand Down Expand Up @@ -34,6 +38,17 @@
</li>
</ul><!--/dropdown-->

<ul id="dropdown-checkmessages" class="dropdown">
<li><button wo-touch="check(CHECKALL)">All</button></li>
<li><button wo-touch="check(CHECKNONE)">None</button></li>
<li><button wo-touch="check(CHECKENCRYPTED)">Encrypted</button></li>
<li><button wo-touch="check(CHECKUNENCRYPTED)">Unencrypted</button></li>
<li><button wo-touch="check(CHECKUNREAD)">Unread</button></li>
<li><button wo-touch="check(CHECKREAD)">Read</button></li>
<li><button wo-touch="check(CHECKFLAGGED)">Starred</button></li>
<li><button wo-touch="check(CHECKUNFLAGGED)">Unstarred</button></li>
</ul><!--/checkmessages-->

<ul id="dropdown-more" class="dropdown">
<li><button wo-touch="state.read.open ? markMessage(state.mailList.selected, false) : markCheckedMessages(false)">Mark as read</button></li>
<li><button wo-touch="state.read.open ? markMessage(state.mailList.selected, true) : markCheckedMessages(true)">Mark as unread</button></li>
Expand Down
88 changes: 88 additions & 0 deletions test/unit/controller/app/action-bar-ctrl-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,20 @@ describe('Action Bar Controller unit test', function() {
type: 'Inbox',
path: 'INBOX',
messages: [{
from: [],
checked: true
}, {
from: [],
checked: false
}, {
from: [],
flagged: true
}, {
from: [],
encrypted: true
}, {
from: [],
unread: true
}]
}
};
Expand All @@ -43,6 +54,83 @@ describe('Action Bar Controller unit test', function() {

afterEach(function() {});

describe('check', function() {
it('should check all', function() {
scope.check(scope.CHECKALL);

expect(scope.state.nav.currentFolder.messages[0].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.true;
});

it('should check none', function() {
scope.check(scope.CHECKNONE);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.false;
});

it('should check encrypted', function() {
scope.check(scope.CHECKENCRYPTED);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.false;
});

it('should check unencrypted', function() {
scope.check(scope.CHECKUNENCRYPTED);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.true;
});

it('should check unread', function() {
scope.check(scope.CHECKUNREAD);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.true;
});

it('should check read', function() {
scope.check(scope.CHECKREAD);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.false;

});

it('should check starred', function() {
scope.check(scope.CHECKFLAGGED);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.false;

});

it('should check unstarred', function() {
scope.check(scope.CHECKUNFLAGGED);
expect(scope.state.nav.currentFolder.messages[0].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[1].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[2].checked).to.be.false;
expect(scope.state.nav.currentFolder.messages[3].checked).to.be.true;
expect(scope.state.nav.currentFolder.messages[4].checked).to.be.true;
});
});

describe('deleteMessage', function() {
it('should not delete without a selected mail', function() {
scope.deleteMessage();
Expand Down