Merge pull request #337 from whiteout-io/dev/WO-964

[WO-964] Do not wait for next watch timer for ui update and general clea...
This commit is contained in:
Tankred Hase 2015-05-09 11:14:25 +02:00
commit e5e1c118be
2 changed files with 45 additions and 43 deletions

View File

@ -53,8 +53,12 @@ var ReadCtrl = function($scope, $location, $q, email, invitation, outbox, pgp, k
}; };
$scope.decrypt = function(message) { $scope.decrypt = function(message) {
return email.decryptBody({ return $q(function(resolve) {
message: message resolve();
}).then(function() {
return email.decryptBody({
message: message
});
}); });
}; };

View File

@ -53,8 +53,7 @@ ngModule.directive('frameLoad', function($window) {
if (open) { if (open) {
// trigger rendering of iframe // trigger rendering of iframe
// otherwise scale to fit would not compute correct dimensions on mobile // otherwise scale to fit would not compute correct dimensions on mobile
displayText(scope.state.mailList.selected ? scope.state.mailList.selected.body : undefined); displayContent();
displayHtml(scope.state.mailList.selected ? scope.state.mailList.selected.html : undefined);
} }
}); });
@ -84,60 +83,59 @@ ngModule.directive('frameLoad', function($window) {
iframe.onload = function() { iframe.onload = function() {
// set listeners // set listeners
scope.$watch('state.mailList.selected.body', displayText); scope.$watch('state.mailList.selected.body', displayContent);
scope.$watch('state.mailList.selected.html', displayHtml); scope.$watch('state.mailList.selected.html', displayContent);
// display initial message body // display initial message body
scope.$apply(); scope.$apply();
}; };
function displayText(body) { function displayContent() {
var mail = scope.state.mailList.selected; var mail = scope.state.mailList.selected;
if (mail && mail.encrypted && !mail.decrypted) { if (!mail) {
return;
}
if (mail.encrypted && !mail.decrypted) {
// decrypt current mail // decrypt current mail
scope.decrypt(mail); scope.decrypt(mail).then(function() {
return; if (scope.state.mailList.selected === mail && mail.decrypted) {
} // decrypted mail is still selected, immidiately show body
displayContent();
if (mail && mail.html) { }
});
return; return;
} }
resetWidth(); resetWidth();
// send text body for rendering in iframe if (mail.html) {
iframe.contentWindow.postMessage({ // if there are image tags in the html?
text: body var hasImages = /<img[^>]+\bsrc=['"][^'">]+['"]/ig.test(mail.html);
}, '*'); scope.showImageButton = hasImages;
}
function displayHtml(html) { iframe.contentWindow.postMessage({
if (!html) { html: mail.html,
return; removeImages: hasImages // avoids doing unnecessary work on the html
}, '*');
// only add a scope function to reload the html if there are images
if (hasImages) {
// reload WITH images
scope.displayImages = function() {
scope.showImageButton = false;
iframe.contentWindow.postMessage({
html: mail.html,
removeImages: false
}, '*');
};
}
} else if (mail.body) {
iframe.contentWindow.postMessage({
text: mail.body
}, '*');
} }
resetWidth();
// if there are image tags in the html?
var hasImages = /<img[^>]+\bsrc=['"][^'">]+['"]/ig.test(html);
scope.showImageButton = hasImages;
iframe.contentWindow.postMessage({
html: html,
removeImages: hasImages // avoids doing unnecessary work on the html
}, '*');
// only add a scope function to reload the html if there are images
if (hasImages) {
// reload WITH images
scope.displayImages = function() {
scope.showImageButton = false;
iframe.contentWindow.postMessage({
html: html,
removeImages: false
}, '*');
};
}
} }
// reset the iframe width to the original (min-width:100%) // reset the iframe width to the original (min-width:100%)