2013-11-16 06:21:12 +08:00
|
|
|
|
2014-09-05 06:49:03 +08:00
|
|
|
(function () {
|
2014-08-25 23:49:01 +08:00
|
|
|
|
|
|
|
'use strict';
|
2014-08-20 23:03:12 +08:00
|
|
|
|
2013-11-16 06:21:12 +08:00
|
|
|
var
|
2014-09-02 08:15:31 +08:00
|
|
|
_ = require('_'),
|
2014-08-25 23:49:01 +08:00
|
|
|
$ = require('$'),
|
|
|
|
ko = require('ko'),
|
|
|
|
key = require('key'),
|
2014-08-25 15:10:51 +08:00
|
|
|
|
2014-09-05 06:49:03 +08:00
|
|
|
Consts = require('Common/Consts'),
|
|
|
|
Enums = require('Common/Enums'),
|
|
|
|
Globals = require('Common/Globals'),
|
|
|
|
Utils = require('Common/Utils'),
|
|
|
|
Events = require('Common/Events'),
|
2014-08-21 23:08:34 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
Cache = require('Storage/User/Cache'),
|
|
|
|
Data = require('Storage/User/Data'),
|
|
|
|
Remote = require('Storage/User/Remote'),
|
2014-08-22 23:08:56 +08:00
|
|
|
|
2014-09-06 05:44:29 +08:00
|
|
|
kn = require('Knoin/Knoin'),
|
|
|
|
AbstractView = require('Knoin/AbstractView')
|
2013-11-16 06:21:12 +08:00
|
|
|
;
|
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @constructor
|
2014-09-06 05:44:29 +08:00
|
|
|
* @extends AbstractView
|
2014-08-20 23:03:12 +08:00
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
function MessageViewMailBoxUserView()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-09-06 05:44:29 +08:00
|
|
|
AbstractView.call(this, 'Right', 'MailMessageView');
|
2014-08-20 23:03:12 +08:00
|
|
|
|
|
|
|
var
|
|
|
|
self = this,
|
|
|
|
sLastEmail = '',
|
|
|
|
createCommandHelper = function (sType) {
|
|
|
|
return Utils.createCommand(self, function () {
|
|
|
|
this.replyOrforward(sType);
|
|
|
|
}, self.canBeRepliedOrForwarded);
|
|
|
|
}
|
|
|
|
;
|
|
|
|
|
|
|
|
this.oMessageScrollerDom = null;
|
|
|
|
|
2014-08-22 23:08:56 +08:00
|
|
|
this.message = Data.message;
|
|
|
|
this.currentMessage = Data.currentMessage;
|
|
|
|
this.messageListChecked = Data.messageListChecked;
|
|
|
|
this.hasCheckedMessages = Data.hasCheckedMessages;
|
|
|
|
this.messageListCheckedOrSelectedUidsWithSubMails = Data.messageListCheckedOrSelectedUidsWithSubMails;
|
|
|
|
this.messageLoading = Data.messageLoading;
|
|
|
|
this.messageLoadingThrottle = Data.messageLoadingThrottle;
|
|
|
|
this.messagesBodiesDom = Data.messagesBodiesDom;
|
|
|
|
this.useThreads = Data.useThreads;
|
|
|
|
this.replySameFolder = Data.replySameFolder;
|
|
|
|
this.layout = Data.layout;
|
|
|
|
this.usePreviewPane = Data.usePreviewPane;
|
|
|
|
this.isMessageSelected = Data.isMessageSelected;
|
|
|
|
this.messageActiveDom = Data.messageActiveDom;
|
|
|
|
this.messageError = Data.messageError;
|
|
|
|
|
|
|
|
this.fullScreenMode = Data.messageFullScreenMode;
|
2014-08-20 23:03:12 +08:00
|
|
|
|
|
|
|
this.showFullInfo = ko.observable(false);
|
|
|
|
this.moreDropdownTrigger = ko.observable(false);
|
|
|
|
this.messageDomFocused = ko.observable(false).extend({'rateLimit': 0});
|
|
|
|
|
|
|
|
this.messageVisibility = ko.computed(function () {
|
|
|
|
return !this.messageLoadingThrottle() && !!this.message();
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
this.message.subscribe(function (oMessage) {
|
|
|
|
if (!oMessage)
|
|
|
|
{
|
|
|
|
this.currentMessage(null);
|
|
|
|
}
|
|
|
|
}, this);
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.canBeRepliedOrForwarded = this.messageVisibility;
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
// commands
|
|
|
|
this.closeMessage = Utils.createCommand(this, function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
Data.message(null);
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.replyCommand = createCommandHelper(Enums.ComposeType.Reply);
|
|
|
|
this.replyAllCommand = createCommandHelper(Enums.ComposeType.ReplyAll);
|
|
|
|
this.forwardCommand = createCommandHelper(Enums.ComposeType.Forward);
|
|
|
|
this.forwardAsAttachmentCommand = createCommandHelper(Enums.ComposeType.ForwardAsAttachment);
|
|
|
|
this.editAsNewCommand = createCommandHelper(Enums.ComposeType.EditAsNew);
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.messageVisibilityCommand = Utils.createCommand(this, Utils.emptyFunction, this.messageVisibility);
|
2014-03-20 00:18:28 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.messageEditCommand = Utils.createCommand(this, function () {
|
|
|
|
this.editMessage();
|
|
|
|
}, this.messageVisibility);
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.deleteCommand = Utils.createCommand(this, function () {
|
|
|
|
if (this.message())
|
|
|
|
{
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Trash,
|
2014-08-20 23:03:12 +08:00
|
|
|
this.message().folderFullNameRaw,
|
|
|
|
[this.message().uid], true);
|
|
|
|
}
|
|
|
|
}, this.messageVisibility);
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.deleteWithoutMoveCommand = Utils.createCommand(this, function () {
|
|
|
|
if (this.message())
|
|
|
|
{
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Trash,
|
2014-08-22 23:08:56 +08:00
|
|
|
Data.currentFolderFullNameRaw(),
|
2014-08-20 23:03:12 +08:00
|
|
|
[this.message().uid], false);
|
|
|
|
}
|
|
|
|
}, this.messageVisibility);
|
2013-12-11 04:14:59 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.archiveCommand = Utils.createCommand(this, function () {
|
|
|
|
if (this.message())
|
|
|
|
{
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Archive,
|
2014-08-20 23:03:12 +08:00
|
|
|
this.message().folderFullNameRaw,
|
|
|
|
[this.message().uid], true);
|
|
|
|
}
|
|
|
|
}, this.messageVisibility);
|
2014-04-02 07:58:24 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.spamCommand = Utils.createCommand(this, function () {
|
|
|
|
if (this.message())
|
2014-05-13 16:29:36 +08:00
|
|
|
{
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').deleteMessagesFromFolder(Enums.FolderType.Spam,
|
2014-08-20 23:03:12 +08:00
|
|
|
this.message().folderFullNameRaw,
|
|
|
|
[this.message().uid], true);
|
2014-05-13 16:29:36 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
}, this.messageVisibility);
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.notSpamCommand = Utils.createCommand(this, function () {
|
|
|
|
if (this.message())
|
|
|
|
{
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').deleteMessagesFromFolder(Enums.FolderType.NotSpam,
|
2014-08-20 23:03:12 +08:00
|
|
|
this.message().folderFullNameRaw,
|
|
|
|
[this.message().uid], true);
|
|
|
|
}
|
|
|
|
}, this.messageVisibility);
|
|
|
|
|
|
|
|
// viewer
|
|
|
|
this.viewHash = '';
|
|
|
|
this.viewSubject = ko.observable('');
|
|
|
|
this.viewFromShort = ko.observable('');
|
|
|
|
this.viewToShort = ko.observable('');
|
|
|
|
this.viewFrom = ko.observable('');
|
|
|
|
this.viewTo = ko.observable('');
|
|
|
|
this.viewCc = ko.observable('');
|
|
|
|
this.viewBcc = ko.observable('');
|
|
|
|
this.viewDate = ko.observable('');
|
2014-09-02 08:15:31 +08:00
|
|
|
this.viewSize = ko.observable('');
|
2014-08-20 23:03:12 +08:00
|
|
|
this.viewMoment = ko.observable('');
|
|
|
|
this.viewLineAsCcc = ko.observable('');
|
|
|
|
this.viewViewLink = ko.observable('');
|
|
|
|
this.viewDownloadLink = ko.observable('');
|
|
|
|
this.viewUserPic = ko.observable(Consts.DataImages.UserDotPic);
|
|
|
|
this.viewUserPicVisible = ko.observable(false);
|
|
|
|
|
|
|
|
this.viewPgpPassword = ko.observable('');
|
|
|
|
this.viewPgpSignedVerifyStatus = ko.computed(function () {
|
|
|
|
return this.message() ? this.message().pgpSignedVerifyStatus() : Enums.SignedVerifyStatus.None;
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
this.viewPgpSignedVerifyUser = ko.computed(function () {
|
|
|
|
return this.message() ? this.message().pgpSignedVerifyUser() : '';
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
this.message.subscribe(function (oMessage) {
|
|
|
|
|
|
|
|
this.messageActiveDom(null);
|
|
|
|
|
|
|
|
this.viewPgpPassword('');
|
|
|
|
|
|
|
|
if (oMessage)
|
|
|
|
{
|
|
|
|
if (this.viewHash !== oMessage.hash)
|
2013-11-16 06:21:12 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
this.scrollMessageToTop();
|
|
|
|
}
|
|
|
|
|
|
|
|
this.viewHash = oMessage.hash;
|
|
|
|
this.viewSubject(oMessage.subject());
|
|
|
|
this.viewFromShort(oMessage.fromToLine(true, true));
|
|
|
|
this.viewToShort(oMessage.toToLine(true, true));
|
|
|
|
this.viewFrom(oMessage.fromToLine(false));
|
|
|
|
this.viewTo(oMessage.toToLine(false));
|
|
|
|
this.viewCc(oMessage.ccToLine(false));
|
|
|
|
this.viewBcc(oMessage.bccToLine(false));
|
|
|
|
this.viewDate(oMessage.fullFormatDateValue());
|
2014-09-02 08:15:31 +08:00
|
|
|
this.viewSize(oMessage.friendlySize());
|
2014-08-20 23:03:12 +08:00
|
|
|
this.viewMoment(oMessage.momentDate());
|
|
|
|
this.viewLineAsCcc(oMessage.lineAsCcc());
|
|
|
|
this.viewViewLink(oMessage.viewLink());
|
|
|
|
this.viewDownloadLink(oMessage.downloadLink());
|
|
|
|
|
|
|
|
sLastEmail = oMessage.fromAsSingleEmail();
|
2014-08-21 23:08:34 +08:00
|
|
|
Cache.getUserPic(sLastEmail, function (sPic, $sEmail) {
|
2014-08-20 23:03:12 +08:00
|
|
|
if (sPic !== self.viewUserPic() && sLastEmail === $sEmail)
|
2014-04-26 05:50:17 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
self.viewUserPicVisible(false);
|
|
|
|
self.viewUserPic(Consts.DataImages.UserDotPic);
|
|
|
|
if ('' !== sPic)
|
|
|
|
{
|
|
|
|
self.viewUserPicVisible(true);
|
|
|
|
self.viewUserPic(sPic);
|
|
|
|
}
|
2014-04-26 05:50:17 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this.viewHash = '';
|
|
|
|
this.scrollMessageToTop();
|
|
|
|
}
|
|
|
|
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
this.fullScreenMode.subscribe(function (bValue) {
|
|
|
|
if (bValue)
|
|
|
|
{
|
2014-09-02 00:05:32 +08:00
|
|
|
Globals.$html.addClass('rl-message-fullscreen');
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2014-09-02 00:05:32 +08:00
|
|
|
Globals.$html.removeClass('rl-message-fullscreen');
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
Utils.windowResize();
|
|
|
|
});
|
|
|
|
|
|
|
|
this.messageLoadingThrottle.subscribe(function (bV) {
|
|
|
|
if (bV)
|
|
|
|
{
|
|
|
|
Utils.windowResize();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
this.goUpCommand = Utils.createCommand(this, function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
Events.pub('mailbox.message-list.selector.go-up');
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
this.goDownCommand = Utils.createCommand(this, function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
Events.pub('mailbox.message-list.selector.go-down');
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
kn.constructorEnd(this);
|
|
|
|
}
|
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
kn.extendAsViewModel(['View/User/MailBox/MessageView', 'View/App/MailBox/MessageView', 'MailBoxMessageViewViewModel'], MessageViewMailBoxUserView);
|
|
|
|
_.extend(MessageViewMailBoxUserView.prototype, AbstractView.prototype);
|
2014-08-20 23:03:12 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isPgpActionVisible = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
return Enums.SignedVerifyStatus.Success !== this.viewPgpSignedVerifyStatus();
|
|
|
|
};
|
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isPgpStatusVerifyVisible = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
return Enums.SignedVerifyStatus.None !== this.viewPgpSignedVerifyStatus();
|
|
|
|
};
|
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isPgpStatusVerifySuccess = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
return Enums.SignedVerifyStatus.Success === this.viewPgpSignedVerifyStatus();
|
|
|
|
};
|
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.pgpStatusVerifyMessage = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
var sResult = '';
|
|
|
|
switch (this.viewPgpSignedVerifyStatus())
|
2014-05-13 16:29:36 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
case Enums.SignedVerifyStatus.UnknownPublicKeys:
|
|
|
|
sResult = Utils.i18n('PGP_NOTIFICATIONS/NO_PUBLIC_KEYS_FOUND');
|
|
|
|
break;
|
|
|
|
case Enums.SignedVerifyStatus.UnknownPrivateKey:
|
|
|
|
sResult = Utils.i18n('PGP_NOTIFICATIONS/NO_PRIVATE_KEY_FOUND');
|
|
|
|
break;
|
|
|
|
case Enums.SignedVerifyStatus.Unverified:
|
|
|
|
sResult = Utils.i18n('PGP_NOTIFICATIONS/UNVERIFIRED_SIGNATURE');
|
|
|
|
break;
|
|
|
|
case Enums.SignedVerifyStatus.Error:
|
|
|
|
sResult = Utils.i18n('PGP_NOTIFICATIONS/DECRYPTION_ERROR');
|
|
|
|
break;
|
|
|
|
case Enums.SignedVerifyStatus.Success:
|
|
|
|
sResult = Utils.i18n('PGP_NOTIFICATIONS/GOOD_SIGNATURE', {
|
|
|
|
'USER': this.viewPgpSignedVerifyUser()
|
|
|
|
});
|
|
|
|
break;
|
2014-05-13 16:29:36 +08:00
|
|
|
}
|
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
return sResult;
|
|
|
|
};
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.fullScreen = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
this.fullScreenMode(true);
|
|
|
|
Utils.windowResize();
|
|
|
|
};
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.unFullScreen = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
this.fullScreenMode(false);
|
|
|
|
Utils.windowResize();
|
|
|
|
};
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.toggleFullScreen = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
Utils.removeSelection();
|
2013-12-13 07:23:47 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.fullScreenMode(!this.fullScreenMode());
|
|
|
|
Utils.windowResize();
|
|
|
|
};
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @param {string} sType
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.replyOrforward = function (sType)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-09-06 05:44:29 +08:00
|
|
|
kn.showScreenPopup(require('View/Popup/Compose'), [sType, Data.message()]);
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.onBuild = function (oDom)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-27 23:59:44 +08:00
|
|
|
var self = this;
|
2014-08-20 23:03:12 +08:00
|
|
|
this.fullScreenMode.subscribe(function (bValue) {
|
|
|
|
if (bValue)
|
|
|
|
{
|
|
|
|
self.message.focused(true);
|
|
|
|
}
|
|
|
|
}, this);
|
|
|
|
|
|
|
|
$('.attachmentsPlace', oDom).magnificPopup({
|
|
|
|
'delegate': '.magnificPopupImage:visible',
|
|
|
|
'type': 'image',
|
|
|
|
'gallery': {
|
|
|
|
'enabled': true,
|
|
|
|
'preload': [1, 1],
|
|
|
|
'navigateByImgClick': true
|
|
|
|
},
|
|
|
|
'callbacks': {
|
|
|
|
'open': function() {
|
2014-08-22 23:08:56 +08:00
|
|
|
Globals.useKeyboardShortcuts(false);
|
2014-08-20 23:03:12 +08:00
|
|
|
},
|
|
|
|
'close': function() {
|
2014-08-22 23:08:56 +08:00
|
|
|
Globals.useKeyboardShortcuts(true);
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
|
|
|
},
|
|
|
|
'mainClass': 'mfp-fade',
|
|
|
|
'removalDelay': 400
|
|
|
|
});
|
2014-04-02 02:03:37 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
oDom
|
|
|
|
.on('click', 'a', function (oEvent) {
|
|
|
|
// setup maito protocol
|
2014-09-06 05:44:29 +08:00
|
|
|
return !(!!oEvent && 3 !== oEvent['which'] && Utils.mailToHelper($(this).attr('href'), require('View/Popup/Compose')));
|
2014-08-20 23:03:12 +08:00
|
|
|
})
|
|
|
|
.on('click', '.attachmentsPlace .attachmentPreview', function (oEvent) {
|
|
|
|
if (oEvent && oEvent.stopPropagation)
|
|
|
|
{
|
|
|
|
oEvent.stopPropagation();
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.on('click', '.attachmentsPlace .attachmentItem', function () {
|
2014-04-02 02:03:37 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
var
|
|
|
|
oAttachment = ko.dataFor(this)
|
|
|
|
;
|
|
|
|
|
|
|
|
if (oAttachment && oAttachment.download)
|
|
|
|
{
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').download(oAttachment.linkDownload());
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
|
|
|
})
|
|
|
|
;
|
|
|
|
|
|
|
|
this.message.focused.subscribe(function (bValue) {
|
|
|
|
if (bValue && !Utils.inFocus()) {
|
|
|
|
this.messageDomFocused(true);
|
|
|
|
} else {
|
|
|
|
this.messageDomFocused(false);
|
2014-09-02 08:15:31 +08:00
|
|
|
this.scrollMessageToTop();
|
|
|
|
this.scrollMessageToLeft();
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
|
|
|
}, this);
|
2014-04-02 02:03:37 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.messageDomFocused.subscribe(function (bValue) {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (!bValue && Enums.KeyState.MessageView === Globals.keyScope())
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
this.message.focused(false);
|
|
|
|
}
|
|
|
|
}, this);
|
2014-04-02 02:03:37 +08:00
|
|
|
|
2014-08-22 23:08:56 +08:00
|
|
|
Globals.keyScope.subscribe(function (sValue) {
|
2014-08-20 23:03:12 +08:00
|
|
|
if (Enums.KeyState.MessageView === sValue && this.message.focused())
|
|
|
|
{
|
|
|
|
this.messageDomFocused(true);
|
|
|
|
}
|
|
|
|
}, this);
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
this.oMessageScrollerDom = oDom.find('.messageItem .content');
|
|
|
|
this.oMessageScrollerDom = this.oMessageScrollerDom && this.oMessageScrollerDom[0] ? this.oMessageScrollerDom : null;
|
|
|
|
|
|
|
|
this.initShortcuts();
|
|
|
|
};
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.escShortcuts = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
if (this.viewModelVisibility() && this.message())
|
2013-11-16 06:21:12 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
if (this.fullScreenMode())
|
|
|
|
{
|
|
|
|
this.fullScreenMode(false);
|
|
|
|
}
|
2014-08-22 23:08:56 +08:00
|
|
|
else if (Enums.Layout.NoPreview === Data.layout())
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
this.message(null);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this.message.focused(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
2013-11-16 06:21:12 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.initShortcuts = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
var
|
2014-08-22 23:08:56 +08:00
|
|
|
self = this
|
2014-08-20 23:03:12 +08:00
|
|
|
;
|
|
|
|
|
|
|
|
// exit fullscreen, back
|
|
|
|
key('esc', Enums.KeyState.MessageView, _.bind(this.escShortcuts, this));
|
|
|
|
|
|
|
|
// fullscreen
|
|
|
|
key('enter', Enums.KeyState.MessageView, function () {
|
|
|
|
self.toggleFullScreen();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
key('enter', Enums.KeyState.MessageList, function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (Enums.Layout.NoPreview !== Data.layout() && self.message())
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
self.toggleFullScreen();
|
|
|
|
return false;
|
2013-11-16 06:21:12 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
// reply
|
|
|
|
key('r', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (Data.message())
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
self.replyCommand();
|
|
|
|
return false;
|
2014-04-08 05:03:58 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
// replaAll
|
|
|
|
key('a', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (Data.message())
|
2013-11-16 06:21:12 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
self.replyAllCommand();
|
|
|
|
return false;
|
2013-11-16 06:21:12 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
});
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
// forward
|
|
|
|
key('f', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (Data.message())
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
self.forwardCommand();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
// message information
|
|
|
|
// key('i', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
|
|
|
// if (oData.message())
|
|
|
|
// {
|
|
|
|
// self.showFullInfo(!self.showFullInfo());
|
|
|
|
// return false;
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
|
|
|
|
// toggle message blockquotes
|
|
|
|
key('b', [Enums.KeyState.MessageList, Enums.KeyState.MessageView], function () {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (Data.message() && Data.message().body)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-09-02 08:15:31 +08:00
|
|
|
Data.message().body.find('.rlBlockquoteSwitcher').click();
|
2014-08-20 23:03:12 +08:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
key('ctrl+left, command+left, ctrl+up, command+up', Enums.KeyState.MessageView, function () {
|
|
|
|
self.goUpCommand();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
key('ctrl+right, command+right, ctrl+down, command+down', Enums.KeyState.MessageView, function () {
|
|
|
|
self.goDownCommand();
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
|
|
|
// print
|
|
|
|
key('ctrl+p, command+p', Enums.KeyState.MessageView, function () {
|
|
|
|
if (self.message())
|
2013-11-16 06:21:12 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
self.message().printMessage();
|
2013-11-16 06:21:12 +08:00
|
|
|
}
|
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
return false;
|
|
|
|
});
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
// delete
|
|
|
|
key('delete, shift+delete', Enums.KeyState.MessageView, function (event, handler) {
|
|
|
|
if (event)
|
|
|
|
{
|
|
|
|
if (handler && 'shift+delete' === handler.shortcut)
|
|
|
|
{
|
|
|
|
self.deleteWithoutMoveCommand();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
self.deleteCommand();
|
|
|
|
}
|
2014-04-12 09:05:57 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
// change focused state
|
2014-09-02 08:15:31 +08:00
|
|
|
key('tab, shift+tab, left', Enums.KeyState.MessageView, function (event, handler) {
|
2014-08-22 23:08:56 +08:00
|
|
|
if (!self.fullScreenMode() && self.message() && Enums.Layout.NoPreview !== Data.layout())
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-09-02 08:15:31 +08:00
|
|
|
if (event && handler && 'left' === handler.shortcut)
|
|
|
|
{
|
|
|
|
if (self.oMessageScrollerDom && 0 < self.oMessageScrollerDom.scrollLeft())
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
self.message.focused(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
self.message.focused(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (self.message() && Enums.Layout.NoPreview === Data.layout() && event && handler && 'left' === handler.shortcut)
|
|
|
|
{
|
|
|
|
return true;
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
return false;
|
|
|
|
});
|
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isDraftFolder = function ()
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
return Data.message() && Data.draftFolder() === Data.message().folderFullNameRaw;
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isSentFolder = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
return Data.message() && Data.sentFolder() === Data.message().folderFullNameRaw;
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isSpamFolder = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
return Data.message() && Data.spamFolder() === Data.message().folderFullNameRaw;
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isSpamDisabled = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
return Data.message() && Data.spamFolder() === Consts.Values.UnuseOptionValue;
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isArchiveFolder = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
return Data.message() && Data.archiveFolder() === Data.message().folderFullNameRaw;
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isArchiveDisabled = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
return Data.message() && Data.archiveFolder() === Consts.Values.UnuseOptionValue;
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-13 08:38:18 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @return {boolean}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.isDraftOrSentFolder = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
return this.isDraftFolder() || this.isSentFolder();
|
|
|
|
};
|
2014-04-12 09:05:57 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.composeClick = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-09-06 05:44:29 +08:00
|
|
|
kn.showScreenPopup(require('View/Popup/Compose'));
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.editMessage = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
2014-08-22 23:08:56 +08:00
|
|
|
if (Data.message())
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-09-06 05:44:29 +08:00
|
|
|
kn.showScreenPopup(require('View/Popup/Compose'), [Enums.ComposeType.Draft, Data.message()]);
|
2014-04-08 05:03:58 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.scrollMessageToTop = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
if (this.oMessageScrollerDom)
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-11-20 07:25:39 +08:00
|
|
|
if (50 < this.oMessageScrollerDom.scrollTop())
|
|
|
|
{
|
|
|
|
this.oMessageScrollerDom
|
|
|
|
.scrollTop(50)
|
|
|
|
.animate({'scrollTop': 0}, 200)
|
|
|
|
;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
this.oMessageScrollerDom.scrollTop(0);
|
|
|
|
}
|
|
|
|
|
2014-09-02 08:15:31 +08:00
|
|
|
Utils.windowResize();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.scrollMessageToLeft = function ()
|
2014-09-02 08:15:31 +08:00
|
|
|
{
|
|
|
|
if (this.oMessageScrollerDom)
|
|
|
|
{
|
|
|
|
this.oMessageScrollerDom.scrollLeft(0);
|
|
|
|
Utils.windowResize();
|
2014-04-08 05:03:58 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param {MessageModel} oMessage
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.showImages = function (oMessage)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
if (oMessage && oMessage.showExternalImages)
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
oMessage.showExternalImages(true);
|
2014-04-08 05:03:58 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @returns {string}
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.printableCheckedMessageCount = function ()
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
var iCnt = this.messageListCheckedOrSelectedUidsWithSubMails().length;
|
|
|
|
return 0 < iCnt ? (100 > iCnt ? iCnt : '99+') : '';
|
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-04-09 03:22:17 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @param {MessageModel} oMessage
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.verifyPgpSignedClearMessage = function (oMessage)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
if (oMessage)
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
oMessage.verifyPgpSignedClearMessage();
|
2014-04-08 05:03:58 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-05-13 16:29:36 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @param {MessageModel} oMessage
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.decryptPgpEncryptedMessage = function (oMessage)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
if (oMessage)
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-08-20 23:03:12 +08:00
|
|
|
oMessage.decryptPgpEncryptedMessage(this.viewPgpPassword());
|
2014-04-08 05:03:58 +08:00
|
|
|
}
|
2014-08-20 23:03:12 +08:00
|
|
|
};
|
2014-04-08 05:03:58 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
/**
|
|
|
|
* @param {MessageModel} oMessage
|
|
|
|
*/
|
2014-10-18 21:43:44 +08:00
|
|
|
MessageViewMailBoxUserView.prototype.readReceipt = function (oMessage)
|
2014-08-20 23:03:12 +08:00
|
|
|
{
|
|
|
|
if (oMessage && '' !== oMessage.readReceipt())
|
2014-04-08 05:03:58 +08:00
|
|
|
{
|
2014-08-21 23:08:34 +08:00
|
|
|
Remote.sendReadReceiptMessage(Utils.emptyFunction, oMessage.folderFullNameRaw, oMessage.uid,
|
2014-08-20 23:03:12 +08:00
|
|
|
oMessage.readReceipt(),
|
|
|
|
Utils.i18n('READ_RECEIPT/SUBJECT', {'SUBJECT': oMessage.subject()}),
|
2014-08-22 23:08:56 +08:00
|
|
|
Utils.i18n('READ_RECEIPT/BODY', {'READ-RECEIPT': Data.accountEmail()}));
|
2014-04-13 08:32:07 +08:00
|
|
|
|
2014-08-20 23:03:12 +08:00
|
|
|
oMessage.isReadReceipt(true);
|
2013-11-16 06:21:12 +08:00
|
|
|
|
2014-08-21 23:08:34 +08:00
|
|
|
Cache.storeMessageFlagsToCache(oMessage);
|
2014-08-25 15:10:51 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
require('App/User').reloadFlagsCurrentMessageListAndMessageFromCache();
|
2014-08-20 23:03:12 +08:00
|
|
|
}
|
|
|
|
};
|
2014-01-04 08:20:07 +08:00
|
|
|
|
2014-10-18 21:43:44 +08:00
|
|
|
module.exports = MessageViewMailBoxUserView;
|
2014-01-04 08:20:07 +08:00
|
|
|
|
2014-09-05 06:49:03 +08:00
|
|
|
}());
|