mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-05-21 19:35:38 +00:00
(feat) chips for mail labels
This commit is contained in:
committed by
Francis Lachapelle
parent
8e0230488f
commit
b0318ca7b6
@@ -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];
|
||||
|
||||
|
||||
@@ -126,7 +126,6 @@
|
||||
userNames = [accounts objectsForKey: @"userName" notFoundMarker: nil];
|
||||
|
||||
return [userNames jsonRepresentation];
|
||||
|
||||
}
|
||||
|
||||
- (NSString *) pageFormURL
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user