parent
42bdfbcf7b
commit
68381b31d8
1
NEWS
1
NEWS
|
@ -51,6 +51,7 @@ Bug fixes
|
|||
- [web] fixed messages archiving as zip file
|
||||
- [web] adapted time picker to match changes of md calendar picker
|
||||
- [web] fixed sender addresses of draft when using multiple IMAP accounts (#3577)
|
||||
- [web] create a new message when clicking on a "mailto" link (#3588)
|
||||
- [dav] we now handle the default classifications for tasks (#3541)
|
||||
- [eas] properly unfold long mail headers (#3152)
|
||||
- [eas] correctly set EAS message class for S/MIME messages (#3576)
|
||||
|
|
|
@ -127,7 +127,7 @@
|
|||
<span>{{ viewer.message.from[0].name }}</span><br/>
|
||||
<a href="#" class="md-caption"
|
||||
ng-bind="viewer.message.from[0].email"
|
||||
ng-click="viewer.newMessage($event, viewer.message.from[0])"><!-- from --></a>
|
||||
ng-click="viewer.newMessage($event, { to: [viewer.message.from[0].full] })"><!-- from --></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -143,7 +143,7 @@
|
|||
<div class="pseudo-input-field" ng-show="viewer.$showDetailedRecipients">
|
||||
<span ng-repeat="recipient in viewer.message.to">
|
||||
<a href="#" ng-bind="recipient.full"
|
||||
ng-click="viewer.newMessage($event, recipient)"><!-- recipient --></a>
|
||||
ng-click="viewer.newMessage($event, { to: [recipient.full] })"><!-- recipient --></a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -154,7 +154,7 @@
|
|||
<div class="pseudo-input-field">
|
||||
<span ng-repeat="recipient in viewer.message.cc">
|
||||
<a href="#" ng-bind="recipient.full"
|
||||
ng-click="viewer.newMessage($event, recipient)"><!-- recipient --></a>
|
||||
ng-click="viewer.newMessage($event, { to: [recipient.full] })"><!-- recipient --></a>
|
||||
</span>
|
||||
<md-button style="float: right"
|
||||
label:aria-label="Hide"
|
||||
|
@ -246,8 +246,14 @@
|
|||
<div class="mailer_mailcontent" layout="row" layout-wrap="layout-wrap"
|
||||
ng-repeat="part in viewer.message.$content()"
|
||||
ng-class="part.msgclass">
|
||||
<div class="md-flex" ng-if="part.html" ng-bind-html="part.content | ensureTarget"><!-- msg --></div>
|
||||
<div ng-if="part.compile" class="md-flex" sg-compile="part.content" sg-zoomable-image="sg-zoomable-image"><!-- msg --></div>
|
||||
<div class="md-flex"
|
||||
ng-if="part.html"
|
||||
ng-click="viewer.filterMailtoLinks($event)"
|
||||
ng-bind-html="part.content | ensureTarget"><!-- html msg --></div>
|
||||
<div class="md-flex"
|
||||
ng-if="part.compile"
|
||||
sg-compile="part.content"
|
||||
sg-zoomable-image="sg-zoomable-image"><!-- angular-friendly msg --></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
vm.showFlags = stateMessage.flags && stateMessage.flags.length > 0;
|
||||
vm.$showDetailedRecipients = false;
|
||||
vm.toggleDetailedRecipients = toggleDetailedRecipients;
|
||||
vm.filterMailtoLinks = filterMailtoLinks;
|
||||
vm.doDelete = doDelete;
|
||||
vm.close = close;
|
||||
vm.reply = reply;
|
||||
|
@ -120,6 +121,37 @@
|
|||
$event.preventDefault();
|
||||
}
|
||||
|
||||
function filterMailtoLinks($event) {
|
||||
var href, match, to, cc, bcc, subject, body, data;
|
||||
if ($event.target.tagName == 'A' && 'href' in $event.target.attributes) {
|
||||
href = $event.target.attributes.href.value;
|
||||
match = /^mailto:([^\?]+)/.exec(href);
|
||||
if (match) {
|
||||
// Recipients
|
||||
to = _.map(decodeURIComponent(match[1]).split(','), function(email) {
|
||||
return '<' + email + '>';
|
||||
});
|
||||
data = { to: to };
|
||||
// Subject & body
|
||||
_.forEach(['subject', 'body'], function(param) {
|
||||
var re = new RegExp(param + '=([^&]+)');
|
||||
param = (param == 'body')? 'text' : param;
|
||||
match = re.exec(href);
|
||||
if (match)
|
||||
data[param] = [decodeURIComponent(match[1])];
|
||||
});
|
||||
// Recipients
|
||||
_.forEach(['cc', 'bcc'], function(param) {
|
||||
var re = new RegExp(param + '=([^&]+)');
|
||||
match = re.exec(href);
|
||||
if (match)
|
||||
data[param] = [decodeURIComponent(match[1])];
|
||||
});
|
||||
newMessage($event, data); // will stop event propagation
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function doDelete() {
|
||||
var mailbox, message, state, nextMessage, previousMessage,
|
||||
parentCtrls = $parentControllers();
|
||||
|
@ -177,11 +209,8 @@
|
|||
});
|
||||
}
|
||||
|
||||
function showMailEditor($event, message, recipients) {
|
||||
function showMailEditor($event, message) {
|
||||
if (messageDialog === null) {
|
||||
if (!angular.isDefined(recipients))
|
||||
recipients = [];
|
||||
|
||||
messageDialog = $mdDialog
|
||||
.show({
|
||||
parent: angular.element(document.body),
|
||||
|
@ -194,8 +223,7 @@
|
|||
locals: {
|
||||
stateAccounts: vm.accounts,
|
||||
stateAccount: vm.account,
|
||||
stateMessage: message,
|
||||
stateRecipients: recipients
|
||||
stateMessage: message
|
||||
}
|
||||
})
|
||||
.finally(function() {
|
||||
|
@ -261,9 +289,11 @@
|
|||
$window.close();
|
||||
}
|
||||
|
||||
function newMessage($event, recipient) {
|
||||
var message = vm.account.$newMessage();
|
||||
showMailEditor($event, message, [recipient]);
|
||||
function newMessage($event, editableContent) {
|
||||
vm.account.$newMessage().then(function(message) {
|
||||
angular.extend(message.editable, editableContent);
|
||||
showMailEditor($event, message);
|
||||
});
|
||||
$event.stopPropagation();
|
||||
$event.preventDefault();
|
||||
}
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
/**
|
||||
* @ngInject
|
||||
*/
|
||||
MessageEditorController.$inject = ['$window', '$stateParams', '$mdConstant', '$mdDialog', '$mdToast', 'FileUploader', 'stateAccount', 'stateMessage', 'stateRecipients', 'encodeUriFilter', '$timeout', 'Dialog', 'AddressBook', 'Card', 'Preferences'];
|
||||
function MessageEditorController($window, $stateParams, $mdConstant, $mdDialog, $mdToast, FileUploader, stateAccount, stateMessage, stateRecipients, encodeUriFilter, $timeout, Dialog, AddressBook, Card, Preferences) {
|
||||
MessageEditorController.$inject = ['$window', '$stateParams', '$mdConstant', '$mdDialog', '$mdToast', 'FileUploader', 'stateAccount', 'stateMessage', 'encodeUriFilter', '$timeout', 'Dialog', 'AddressBook', 'Card', 'Preferences'];
|
||||
function MessageEditorController($window, $stateParams, $mdConstant, $mdDialog, $mdToast, FileUploader, stateAccount, stateMessage, encodeUriFilter, $timeout, Dialog, AddressBook, Card, Preferences) {
|
||||
var vm = this, semicolon = 186;
|
||||
|
||||
vm.addRecipient = addRecipient;
|
||||
|
@ -79,10 +79,6 @@
|
|||
addAttachments();
|
||||
}
|
||||
|
||||
if (angular.isDefined(stateRecipients)) {
|
||||
vm.message.editable.to = _.union(vm.message.editable.to, _.map(stateRecipients, 'full'));
|
||||
}
|
||||
|
||||
/**
|
||||
* If this is a popup window, retrieve the mailbox controller of the parent window.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue