(feat) chips for mail labels

This commit is contained in:
Ludovic Marcotte
2015-05-04 13:56:29 -04:00
committed by Francis Lachapelle
parent 8e0230488f
commit b0318ca7b6
6 changed files with 72 additions and 17 deletions
+17 -13
View File
@@ -254,24 +254,24 @@
{
NSArray *flags;
flags = [[self message] valueForKey:@"flags"];
return [flags containsObject:@"deleted"];
flags = [[self message] valueForKey: @"flags"];
return [flags containsObject: @"deleted"];
}
- (BOOL) isMessageRead
{
NSArray *flags;
flags = [[self message] valueForKey:@"flags"];
return [flags containsObject:@"seen"];
flags = [[self message] valueForKey: @"flags"];
return [flags containsObject: @"seen"];
}
- (BOOL) isMessageFlagged
{
NSArray *flags;
flags = [[self message] valueForKey:@"flags"];
return [flags containsObject:@"flagged"];
flags = [[self message] valueForKey: @"flags"];
return [flags containsObject: @"flagged"];
}
- (NSString *) messageUidString
@@ -733,12 +733,12 @@
- (NSArray *) getHeadersForUIDs: (NSArray *) uids
inFolder: (SOGoMailFolder *) mailFolder
{
UIxEnvelopeAddressFormatter *addressFormatter;
NSMutableArray *headers, *msg, *tags;
NSEnumerator *msgsList;
NSArray *to, *from;
NSDictionary *msgs;
NSMutableArray *headers, *msg;
NSEnumerator *msgsList;
NSString *msgDate;
UIxEnvelopeAddressFormatter *addressFormatter;
headers = [NSMutableArray arrayWithCapacity: [uids count]];
addressFormatter = [context mailEnvelopeAddressFormatter];
@@ -801,7 +801,6 @@
else
[msg addObject: @""];
// isRead
[msg addObject: [NSNumber numberWithBool: [self isMessageRead]]];
@@ -817,10 +816,15 @@
// Size
[msg addObject: [[self sizeFormatter] stringForObjectValue: [message objectForKey: @"size"]]];
// labels
[msg addObject: [message objectForKey: @"flags"]];
// Mail labels / tags
tags = [NSMutableArray arrayWithArray: [message objectForKey: @"flags"]];
[tags removeObject: @"deleted"];
[tags removeObject: @"flaggged"];
[tags removeObject: @"recent"];
[tags removeObject: @"seen"];
[msg addObject: tags];
// uid
// UID
[msg addObject: [message objectForKey: @"uid"]];
[headers addObject: msg];
-1
View File
@@ -126,7 +126,6 @@
userNames = [accounts objectsForKey: @"userName" notFoundMarker: nil];
return [userNames jsonRepresentation];
}
- (NSString *) pageFormURL
+1 -1
View File
@@ -7,7 +7,7 @@
xmlns:label="OGo:label"
className="UIxPageFrame"
title="title"
const:userDefaultsKeys="SOGoMailMessageCheck,SOGoRefreshViewCheck,SOGoMailSortByThreads,SOGoMailListViewColumnsOrder,SOGoMailDisplayRemoteInlineImages,SOGoMailComposeMessageType,SOGoMailReplyPlacement"
const:userDefaultsKeys="SOGoMailMessageCheck,SOGoRefreshViewCheck,SOGoMailSortByThreads,SOGoMailListViewColumnsOrder,SOGoMailDisplayRemoteInlineImages,SOGoMailComposeMessageType,SOGoMailReplyPlacement,SOGoMailLabelsColors"
const:userSettingsKeys="Mail"
const:jsFiles="Common/resource.js, Common/user-model.js, Common/acl-model.js, Contacts/card-model.js, Contacts/addressbook-model.js, Mailer/message-model.js, Mailer/mailbox-model.js, Mailer/account-model.js, vendor/ckeditor/ckeditor.js, vendor/ckeditor/ck.js, vendor/angular-file-upload.js">
<script type="text/javascript">
@@ -31,6 +31,26 @@
<a ng-href="mailto:{{message.to[0].email}}" ng-bind="message.to[0].full"><!-- to --></a>
</div>
</div>
<md-chips ng-model="message.flags">
<md-chip-template>
{{message.constructor.$tags[$chip][0]}}
<button md-chip-remove="md-chip-remove"
class="md-chip-remove"
ng-click="addOrRemoveTag('remove', $chip)">
<i class="md-icon-close"><!-- delete tag --></i>
</button>
</md-chip-template>
<md-autocomplete
md-selected-item="tags.selected"
md-selected-item-change="addOrRemoveTag('add', tag)"
md-search-text="tags.searchText"
md-items="tag in message.constructor.filterTags(tags.searchText)"
label:placeholder="Add a tag">
<span md-highlight-text="tags.searchText">{{message.constructor.$tags[tag][0]}}</span>
</md-autocomplete>
</md-chips>
</div>
<!-- <p class="flags">
@@ -40,7 +40,8 @@
$timeout: $timeout,
$log: $log,
$sce: $sce,
$$resource: new Resource(Settings.baseURL, Settings.activeUser)
$$resource: new Resource(Settings.baseURL, Settings.activeUser),
$tags: window.UserDefaults.SOGoMailLabelsColors
});
return Message; // return constructor
@@ -50,6 +51,21 @@
angular.module('SOGo.MailerUI')
.factory('sgMessage', Message.$factory);
/**
* @function filterTags
* @memberof Message.prototype
* @desc Search for tags (ie., mail labels) matching some criterias
* @param {string} search - the search string to match
* @returns a collection of strings
*/
Message.filterTags = function(query) {
var re = new RegExp(query, 'i');
return _.filter(_.keys(Message.$tags), function(tag) {
var value = Message.$tags[tag];
return value[0].search(re) != -1;
});
};
/**
* @function $absolutePath
* @memberof Message.prototype
@@ -193,6 +209,16 @@
return deferred.promise;
};
Message.prototype.$addOrRemoveTag = function(operation, tag) {
var data = {};
data['operation'] = operation;
data['msgUIDs'] = [ this.uid ];
data['flags'] = tag;
return Message.$$resource.post(this.$mailbox.$id(), 'addOrRemoveLabel', data);
}
/**
* @function $reload
* @memberof Message.prototype
@@ -342,7 +368,7 @@
deferred = Message.$q.defer();
// Expose the promise
this.$futureMessageData = futureMessageData;
this.$futureMessageData = futureMessageData;
// Resolve the promise
this.$futureMessageData.then(function(data) {
+6
View File
@@ -239,6 +239,12 @@
.controller('MessageCtrl', ['$scope', '$rootScope', '$stateParams', '$state', 'stateAccount', 'stateMailbox', 'stateMessage', '$timeout', 'encodeUriFilter', 'sgFocus', 'sgDialog', 'sgAccount', 'sgMailbox', function($scope, $rootScope, $stateParams, $state, stateAccount, stateMailbox, stateMessage, $timeout, encodeUriFilter, focus, Dialog, Account, Mailbox) {
$rootScope.message = stateMessage;
$scope.tags = {};
$scope.addOrRemoveTag = function(operation, tag) {
if (tag) {
stateMessage.$addOrRemoveTag(operation, tag);
}
};
$scope.doDelete = function() {
stateMailbox.$deleteMessages([stateMessage.uid]).then(function() {
// Remove card from list of addressbook